C# 从双重乘法转换结果,给出错误的结果 [重复]

C# Cast result from double multiplication which give wrong result [duplicate]

提问人:pengg 提问时间:9/9/2023 最后编辑:Eldarpengg 更新时间:9/9/2023 访问量:39

问:

谁能解释一下?

如图所示,乘法后,我应该得到 29.0,投射到短处,这应该给我 29,但我得到了 28

enter image description here

我做了关于选角的研究,但并没有真正得到答案

C# 强制转换

评论

0赞 Artur 9/9/2023
它可能与双数表示有关,而不是与转换有关
2赞 Selvin 9/9/2023
它实际上是 28.99999,但通过投射,您只需忽略小数位
0赞 lidqy 9/9/2023
var b = Convert.ToInt16(a);不会将 but 四舍五入截断为 29。.99999
0赞 Hans Kesting 9/10/2023
请不要使用代码图像,而是添加为(格式化)文本
0赞 Hans Kesting 9/11/2023
0.0029 实际上是 0.0028999999999999999980015985556747182272374629974365234375(根据 DoubleConverter

答:

1赞 Behnam Faghih 9/9/2023 #1

请注意,“A”被声明为双精度数据类型,这是一种可以存储小数的浮点类型。将“a”的值赋给声明为短整数据类型的变量“b”时,将发生类型转换。 在这种情况下,“A”的小数部分被截断,因为短数据类型只能保存特定范围内的整数。因此,“b”的值将为 28,而不是 29。

评论

0赞 pengg 9/9/2023
谢谢你的回答。我仍然感到困惑:即使发生类型转换截断,乘法后的结果也应该是 29.0。我还是应该得到 29 分吧?
0赞 Behnam Faghih 9/9/2023
这是将浮点数转换为整数类型时的预期行为。如果要保留小数部分并获取值 29,应考虑使用支持十进制值的数据类型,例如 decimal、float 或 double。