关于double小数位数的问题
double d1 = 21335.38;
d1 -= 21335;
Response.Write(d1.ToString());
结果是:
0.380000000001019
而不是0.38,
这是什么原理?
------解决方案--------------------这就好比用三进制数表示,1.1(三进制),是一个有穷小数,但是你就没有办法用十进制表示,只能表示成1.3333333...,那么再转换到三进制,就有误差了。
类似的,除非小数点后面的小数是1/2^n,比如0.5 0.25 0.125 0.0625,或者它们的组合(比如0.75,0.875 ...)否则像0.38是没有办法用二进制准确表示的。计算机内部的浮点数是二进制格式的。
------解决方案--------------------亲 不知道你用过windows内置计算器没有?细心的话 你会发现各种蛋疼的事情都能出现。解释这个需要一些数据理论基础。比如什么 反码 补码 等等等等 一些列。大学的时候老师讲过为啥会这样,可惜忘记了