为什么浮点型/双精度型的MinValue/MaxValue不能放入十进制类型中?

16 浏览
0 Comments

为什么浮点型/双精度型的MinValue/MaxValue不能放入十进制类型中?

考虑以下代码:

float value = float.MinValue;
decimal dec = (decimal) value;

引发未处理的异常。System.OverflowException: Decimal 的值过大或过小。

同样适用于 float.MinValue、float.MaxValue、double.MinValue 和 double.MaxValue。

如果 float 是 32 位,double 是 64 位,为什么它们的最小/最大值无法容纳在 128 位的 decimal 中呢?

admin 更改状态以发布 2023年5月21日
0
0 Comments

正如IsakGo指出的那样,decimalfloatdouble的范围更窄。这是因为decimal的精度比floatdouble高得多。这就是为什么在金融应用中decimal被使用得最多,而不是floatdouble的原因。

由于它具有高精度,decimal的范围更窄。您可以在此处了解更多信息:https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/builtin-types/floating-point-numeric-types

0
0 Comments

原因是decimalfloatdouble要窄。

// decimal.MaxValue
79228162514264337593543950335
// decimal.MinValue
-79228162514264337593543950335
// float.MaxValue
3.402823E+38
// float.MinValue
-3.402823E+38
// double.MaxValue
1.79769313486232E+308
// double.MinValue
-1.79769313486232E+308

0