【发布时间】:2010-07-08 15:04:50
【问题描述】:
这就是我正在做的事情,99.999% 的时间都有效:
((int)(customerBatch.Amount * 100.0)).ToString()
金额值是双倍的。我正在尝试以便士的形式将值写入文本文件,以便传输到服务器进行处理。金额不超过 2 位精度。
如果您使用 580.55 作为金额,这行代码将返回 58054 作为字符串值。
此代码在 64 位网络服务器上运行。
有什么想法吗?
【问题讨论】:
-
见这篇文章:docs.sun.com/source/806-3568/ncg_goldberg.html TL;DR:不要使用 float 或 double 来计算金钱
-
该值以 Money 值的形式来自 SQL Server 数据库。对象包装类对这些值使用“double”,因此我无法更改 Amount 的类型。
-
在处理货币时应尽可能使用小数而不是浮点数。
-
@Sophtware:您应该在包装类上提出一个错误,因为将货币值表示为双精度或浮点数是一个错误。