【发布时间】:2016-01-25 23:37:24
【问题描述】:
在 C# 中使用 decimal 或 float 有什么区别?我知道float 用于更精确的十进制数字,decimal 用于像货币或价格这样的小数点,但是当它用于小数点时,为什么使用decimal而不是float?
【问题讨论】:
-
“我知道 float 用于更精确的十进制数字,而 decimal 用于像货币这样的少数小数” 你反过来说,
decimal更精确。跨度> -
简单的答案。低精度使用浮点数。使用双精度高。使用小数来获得精确的精度。当然,您不能存储超过 15 位小数的范围,但那绝对不是浮点数。
-
@M.kazemAkhgary “准确”!哇!那么
decimal怎么代表 1/3 呢?后者乘以 3 会发生什么? -
对不起。十进制存储大约 28 位数字范围。如果将 1 除以 3,则得到 0.33。它将仅存储 28 个重复的三分球。当你将它乘以 3 时,你将得到 0.99。 28 个重复的 9。如您所见,这是精确的数学评估。但是如果你使用 double 类型,因为它的浮点型和高精度(不精确)你会得到 1。因为它总是会舍入到小数点较少的东西。这就是为什么我们说浮动。它可以根据小数四舍五入或向下舍入。因此它不适合存储例如世界纪录或赛车中的时间。因为毫秒很重要,我们不应该四舍五入!
-
但是当你想以数学形式计算某些东西时,你必须使用 double 来给你更好的数字(在某些情况下,由于四舍五入会给你精确的结果。就像你给出的例子一样。1/3 是不完全存储。0.33*3 不是精确计算的,但是当我们舍入 0.999 时,我们得到 1,这是预期的精确结果)。双倍也比十进制快得多,但你感觉不到它,因为处理器速度很快!你必须阅读这个关于十进制与双倍性能的答案stackoverflow.com/a/329618/4767498
标签: c# floating-point decimal