【发布时间】:2013-09-07 20:02:04
【问题描述】:
我在 C# 中使用双数时遇到了一个奇怪的问题。 NET 这是我的测试:
double my_value = 0.49;
问题是显示的变量值改为 0.48999999999999999 我不需要使用 Math.Round() 函数显示 0.49;我需要准确地存储这个值。
谢谢。
【问题讨论】:
-
总是有用的链接...pages.cs.wisc.edu/~rkennedy/exact-float
-
如果您查看链接问题中的答案,最好使用
Decimal类型。但是,请注意! Double 可能“看起来”很糟糕,但如果您使用该值进行大量计算,它会更加精确。但是,如果您只是简单地存储它或使用它进行简单的加/减计算,那么 Decimal 将为您提供很好的服务。 -
@BinaryWorrier - 取决于什么样的计算。例如在财务计算中,使用 double 将是一个可怕的错误。对于物理计算,double 是完美的,而 decimal 是错误的。
-
@BinaryWorrier - 我需要存储商品价格以进行贝宝结帐,在另一个网站上我不必处理小数,因此回收了代码并发现了该错误。我不需要做任何计算,所以我猜小数是我传递价格的选择。
-
@Corak:取决于财务计算的类型。多年来,我为精算师编写了预测软件,将保险/保险政策累积了数十年。在预计的学期结束之前,对这些值进行了数十万次计算。开始时的小舍入误差可能会导致最终出现较大的差异。使用十进制类型会使最终数字毫无意义。不幸的是,一种尺寸并不适合所有人:)