Yur*_*rik 5 .net c# floating-point casting decimal
在C#4.0中,以下转换表现非常出乎意料:
(decimal)1056964.63f
1056965
Run Code Online (Sandbox Code Playgroud)
铸造到双重工作就好了:
(double)1056964.63f
1056964.625
(decimal)(double)1056964.63f
1056964.625
Run Code Online (Sandbox Code Playgroud)
这是设计的吗?
Jon*_*eet 10
问题在于您的初始值 - float无论如何仅精确到7位有效小数位:
float f = 1056964.63f;
Console.WriteLine(f); // Prints 1056965
Run Code Online (Sandbox Code Playgroud)
所以第二个例子在某些方面是意想不到的.
现在确切的值f是1056965.625,但这是从大约1056964.563到1056964.687的所有值给出的值 - 所以即使".6"部分也不总是正确的.这就是为什么System.Single国家的文件:
默认情况下,Single值仅包含7个十进制数字的精度,但内部最多保留9位数.
转换到时double,额外的信息仍然保留,因为它可以保留它而不用"解释"它 - 将其转换为十进制形式(打印或decimal类型)通过代码知道它不能"信任"最后两位数.
| 归档时间: |
|
| 查看次数: |
4055 次 |
| 最近记录: |