![]() |
1
115
非常,非常不合适。使用十进制。
(乔恩的网页上的例子 here -推荐阅读;-p) |
![]() |
2
34
四舍五入会有效地产生奇数错误。此外,与精确值进行比较非常困难——通常需要应用某种epsilon来检查实际值是否“接近”某个特定值。 下面是一个具体的例子:
|
![]() |
3
7
是的,这不合适。 如果我记得正确的话,double大约有17个有效数字,所以通常舍入误差会远远超过小数点。大多数金融软件使用小数点后4位小数,剩下13位小数可供使用,因此单次操作所能使用的最大数字仍然远远高于美国国债。但舍入误差会随着时间的推移而增加。如果你的软件长时间运行,你最终会损失美分。某些操作会使情况更糟。例如,将大量添加到少量将导致严重的精度损失。 您需要固定点数据类型来进行货币操作,大多数人不介意您在这里或那里损失一分钱,但会计师不像大多数人。
编辑
@由于精度较高,所以jon skeet decimal比double更适合28或29位有效小数。这意味着累积舍入误差变得显著的可能性更小。像boojum提到的固定点数据类型(即表示美分或百分之一的整数,如我所见)实际上更适合。 |
![]() |
4
5
自从
一
|
![]() |
5
4
我的理解是,大多数金融系统用整数来表示货币——也就是说,用美分来计算所有的东西。 实际上是IEEE双精度 可以 精确表示-2^53到+2^53范围内的所有整数。(Hacker's Delight,第262页)如果您只使用加法、减法和乘法,并将所有内容保持在这个范围内,那么您应该不会看到精度损失。不过,我对部门或更复杂的行动非常谨慎。 |
![]() |
6
2
当你不知道自己在做什么的时候,就用双份。 “双倍”可以代表一万亿美元,误差为1/90美分。所以你会得到非常精确的结果。想知道把一个人放在火星上然后让他活着要花多少钱吗?双份正好。 但是对于金钱,经常有非常具体的规则说,一定的计算必须给出一定的结果,而不是其他的。如果您计算的金额非常接近98.135美元,那么通常会有一个规则来确定结果应该是98.14美元还是98.13美元,并且您 必须 遵循该规则并获得所需的结果。 根据你住的地方,用64位整数来表示美分、便士、Kopek或者其他任何你所在国家最小的单位,通常都可以。例如,表示美分的64位有符号整数可以表示高达92223万亿美元的值。32位整数通常不适用。 |
![]() |
7
0
没有一个双精度数总是有舍入误差,如果你在.NET上,使用“decimal”… |
![]() |
8
-4
实际浮点 双重的 只要你选择一个合适的单位,就完全适合于表示金额。 见 http://www.idinews.com/moneyRep.html 定点也是如此 长的 . 两者都消耗8个字节,当然比 十进制的 项目。 某件事是否有效(即产生预期和正确的结果)不是投票或个人偏好的问题。一种技术要么有效,要么无效。 |
![]() |
John V · 是否存在单元测试无法发现的逻辑/流错误类型? 7 年前 |
![]() |
Beefster · 为什么ANSI颜色转义以“m”而不是“]”结尾? 7 年前 |
![]() |
Guillermo Gutiérrez · STR转换是如何工作的? 7 年前 |
![]() |
RudziankoÅ · 合并排序数组算法 7 年前 |
|
user8852560 · 构造函数中的验证和构造函数冲突 7 年前 |
![]() |
jav974 · 订购产品时寻找最佳价格组合的算法 7 年前 |
![]() |
hippietrail · 确定浮点数中前导零的数量 7 年前 |