<分区>
Possible Duplicate:
Why is floating point arithmetic in C# imprecise?
我一直在处理一些数字和 C#,下面这行代码产生的数字与人们预期的不同:
double num = (3600.2 - 3600.0);
我原以为 num 是 0.2,结果却是 0.1999999999998181。它产生一个接近但仍然不同的小数点有什么原因吗?
<分区>
Possible Duplicate:
Why is floating point arithmetic in C# imprecise?
我一直在处理一些数字和 C#,下面这行代码产生的数字与人们预期的不同:
double num = (3600.2 - 3600.0);
我原以为 num 是 0.2,结果却是 0.1999999999998181。它产生一个接近但仍然不同的小数点有什么原因吗?
最佳答案
这是因为double
是 float 据类型。
如果您想要更高的准确性,您可以改为使用 decimal
。
decimal
的文字后缀是 m,因此要使用 decimal
算术(并产生 decimal
结果),您可以将代码编写为
var num = (3600.2m - 3600.0m);
请注意,使用 decimal
有一些缺点。它是 128 位数据类型,而不是 64 位数据类型,64 位是 double
的大小。这使得它在内存和处理方面都更加昂贵。它的范围也比 double
小得多。
关于c# - 减去 double 时的奇怪结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2211378/