c语言用怎么四舍五入小数,请问c语言如何实现四舍五入?

为什么 329.835 会变成 329.83,529.835 会变成 529.84,就是因为在内存中的数字是用二进制表示的,不可能准确表达十进制小数后三个位,刚好 329.835 在内存中相当于 329.83499...,不足 329.835,就会出现这个情况。

int((a*1000+5)*0.001) 的意思是取小数后两个位,但是 basic 语言的语法,不是 c 语言的语法,而且也犯了一个错误,乘 0.001 以后才 int,不是把小数后所有数字都去掉了吗?应该是:int(a*100+0.5) * 0.01,不要外面的括号,并且是在乘以 100 倍的时候取整型。按照 c 语言的语法,应该写成:

(int) (a*100+0.5) * 0.01

(int) 是类型转换运算符。但是 int 只到 32767,安全一点,应该用:

(long) (a*100 + 0.5) * 0.01

不过,这个并不能解决 329.835 相当于 329.83499... 的问题。比较保险的解决方法,第一,把所有的值赋值给 double 型变量,不要用 float,第二,不用 0.5,而是改用 0.50001 这类的数字,把 0.49999 一类的数字纠正过来:

(long) (a*100 + 0.50001) * 0.01

0.50001 中间要加多少个 0 效果才最理想,就要看实际数据了。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值