美文网首页
C#double数据类型运算中的误差(乘以100得到的数据不准确

C#double数据类型运算中的误差(乘以100得到的数据不准确

作者: 堆石成山 | 来源:发表于2021-04-26 10:01 被阅读0次

计算机中double类型数据运算:71.1*100 !=7110?

我们有意思的发现:double类型的数71.1乘以100以后得到的是7109.9999999999991,并不是7110。这样的问题出现在精度要求高的场景就是个大问题了,比如跟金钱相关的应用。

double temp = 71.1;
double result1= temp * 100;//结果却是7109.9999999999991;

这是为什么呢?其实这些数字在计算机中用二进制保存的,二进制就有精度问题,位数越多精度越高,16位比8位高,64位比32位高等,所以计算转换成十进制后可能会出现误差,出现无限小数的情况。
处理办法有:转为decimal数据类型做运算

double temp = 71.1;
double result2 =(double) ((decimal) temp * 100);//此时结果7110

或者用Math.Round舍为最接近的整数:

double temp = 71.1;
double result3=Math.Round(temp * 100);//此时结果7110

使用decimal或者Math.Round可尽量减少这种误差的出现,但是不知道是否能解决所有这样数据的误差。有时候放大100倍、1000倍、10000倍等做计算后再换算回来也可以提高精度。

相关文章

网友评论

      本文标题:C#double数据类型运算中的误差(乘以100得到的数据不准确

      本文链接:https://www.haomeiwen.com/subject/jymsrltx.html