c语言是自动四舍五入,请问c语言如何实现四舍五入?
為什么 329.835 會變成 329.83,529.835 會變成 529.84,就是因為在內(nèi)存中的數(shù)字是用二進(jìn)制表示的,不可能準(zhǔn)確表達(dá)十進(jìn)制小數(shù)后三個位,剛好 329.835 在內(nèi)存中相當(dāng)于 329.83499...,不足 329.835,就會出現(xiàn)這個情況。
int((a*1000+5)*0.001) 的意思是取小數(shù)后兩個位,但是 basic 語言的語法,不是 c 語言的語法,而且也犯了一個錯誤,乘 0.001 以后才 int,不是把小數(shù)后所有數(shù)字都去掉了嗎?應(yīng)該是:int(a*100+0.5) * 0.01,不要外面的括號,并且是在乘以 100 倍的時候取整型。按照 c 語言的語法,應(yīng)該寫成:
(int) (a*100+0.5) * 0.01
(int) 是類型轉(zhuǎn)換運算符。但是 int 只到 32767,安全一點,應(yīng)該用:
(long) (a*100 + 0.5) * 0.01
不過,這個并不能解決 329.835 相當(dāng)于 329.83499... 的問題。比較保險的解決方法,第一,把所有的值賦值給 double 型變量,不要用 float,第二,不用 0.5,而是改用 0.50001 這類的數(shù)字,把 0.49999 一類的數(shù)字糾正過來:
(long) (a*100 + 0.50001) * 0.01
0.50001 中間要加多少個 0 效果才最理想,就要看實際數(shù)據(jù)了。
總結(jié)
以上是生活随笔為你收集整理的c语言是自动四舍五入,请问c语言如何实现四舍五入?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux开源软件经验,Ubuntu L
- 下一篇: c语言中虚函数和纯虚函数,虚函数和纯虚函