C# issue with double number
我有一个奇怪的问题,在C中使用双数字。NET这是我的测试:
问题是显示的变量值是0.48999999999999,我不需要使用Math.Round()函数显示0.49;我需要精确存储该值。
谢谢您。
- 总是有用的链接…pages.cs.wisc.edu/~rkennedy/精确浮动
- 如果您查看链接问题中的答案,您最好使用Decimal类型。但是,请注意!double可能"看起来"不好,但是如果你用这个值做了很多计算,它会更精确。但是,如果您只是简单地存储它或使用它进行简单的加/减计算,那么十进制将很好地为您服务。
- @二元担忧-取决于什么样的计算。例如,在财务计算中,使用double将是一个可怕的错误。在物理计算中,双精度是完美的,小数是错误的。
- @ BialAdvier--我需要为PayPal签出项目价格,在另一个网站上,我不必处理小数,所以回收代码并发现错误。我不需要做任何计算,所以我想十进位是我通过价格的选择。
- @科拉克:取决于财务计算的类型。多年来,我为精算师编写了预测软件,将保险/保障政策累积了几十年。在预计的期末之前,对这些价值进行了数十万次计算。开始时的小舍入误差可能导致结束时的大差异。如果使用十进制,最终的数字将毫无意义。不幸的是,一种尺寸不适合所有尺寸:)
欢迎使用浮点精度。如果需要更高的精度,请使用decimal类型。
1
| decimal my_value = 0.49m; |
如果你想进一步了解这是为什么,我建议你阅读这篇文章-每一个计算机科学家都应该知道关于浮点运算的内容
- 小数并不是固定的精度,因为小数点的编号和位置是在数字中编码的。只是十进制类型的精度比浮点型或双精度型高。
- @当然你是对的,我已经更新了。
使用decimal代替,double是浮点二进制点类型。
1
| decimal my_value = 0.49m; |
有用的链接;
- 浮点表示和精度
- 每一个计算机科学家都应该知道什么是浮点运算
当需要使用精确值时,不要使用double类型。这是decimal类型的域
1
| decimal my_value = 0.49m; |