提问人:Jerry 提问时间:10/25/2022 最后编辑:ProgrammingLlamaJerry 更新时间:10/25/2022 访问量:328
将浮点数转换为十进制,为什么需要显式转换?
Convert float to decimal, why need explicit conversion?
问:
我知道 decimal 类型比 float 更精确,所以我认为将 float 转换为 decimal 就像将 float 转换为 double 一样是合理的。但在现实中,事实并非如此。
float a = 1.1f;
double d = a;
decimal c = (decimal)d; // true
decimal e = (decimal)a; // true
decimal f = a; // error
答:
4赞
Matthew Watson
10/25/2022
#1
- A 的近似范围为 ±1.5 x 10−45 到 ±3.4 x 1038,精度为 6-9 位。
float
- A 的近似范围为 ±1.0 x 10-28 到 ±7.9228 x 10 28,精度为28-29 位。
decimal
如果 超出小数的范围,则将 a 分配给 a 将导致异常。float
decimal
float
因此,如果您尝试在不强制转换的情况下执行此操作,则会出现编译错误。在这些情况下,C# 会谨慎行事。
在这里,我们可以看到范围和精度之间的区别。
A 的范围比 a 大,a 的精度比 a 高。float
decimal
decimal
float
(请注意,如果您尝试在不强制转换的情况下将 a 分配给 a,您也会遇到编译错误,但这次是因为它可能会丢失数据,而不是因为它会引发异常。decimal
float
评论
2赞
Evk
10/25/2022
它(尝试将超出范围的浮点数转换为十进制)实际上不会导致数据丢失,而是导致异常。
评论
[C#]