我们在代码库中进行了多年验证,直到现在为止还不错。当图片中的小数点后四位开始出现问题时,就开始出现此问题。要可视化,请查看以下代码行;
//upto 3 decimal, returns just fine
//temp is equal to 1000.003
var temp = System.Convert.ChangeType("1000.003", TypeCode.Single);
//Test for values upto 4 decimals
//Iteration:1
//Supplied 1000.0001 Return 1000.00012
var temp1 = System.Convert.ChangeType("1000.0001", TypeCode.Single);
//Iteration:2
//Supplied 1000.0004 Return 1000.00043
var temp2 = System.Convert.ChangeType("1000.0004", TypeCode.Single);
//Iteration:3
//Supplied 1000.0007 Return 1000.00067
var temp3 = System.Convert.ChangeType("1000.0007", TypeCode.Single);
为什么这样做呢?还有另一件事是,如果我将TypeCode
更改为double
,那么可以保存精度,为什么?
答案 0 :(得分:4)
来自MSDN:
单个值的精度最高为7位小数,尽管内部最多可保留9位。
您遇到的情况是您传递的数字不能完全表示为Single
,因此它可以为您提供最接近的Single
值。如果必须精确保留十进制表示形式,那么Decimal
是更合适的类型。
请注意,小数点后有四位数字是无关紧要的。对于数字100,000,010