double相加(减)结果会有些误差

 1 出现的问题

最近的做的一个需要是要统计订单表当天和一个月所有商户的利润总,但是在用double累加的时候数据汇出现一点点的误差。

所以想搞清楚这里面的原因。

2 原因说明

double属于floating binary point types(浮点二进制类型),也就是说都double型的数值在相加减的时候,会将数值转换成二进制的数值如10001.10010110011这种表示发再做相加减,但是在转换成二进制代码表示的时候,存储小数部分的位数会有不够的现象,即无限循环小数,这就是造成微差距的主要原因。

 3 解决办法

1.只取需要用到的位数:

小数点台后面的位数部分就不要管了,不过这种方法不太好。

2.Java的话使用BigDecimal类型:

用BigDecimal就不会出现上面的问题了,可以准确的计算小数值.

BigDecimal类型超过16位有效位的数进行精确的运算(28位),而double类型的16位,所以BigDecimal类型比Double类型能表示更精确的浮点数。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容