You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#中double乘法结果转short出现错误的原因咨询

问题原因与解决方案

这是典型的浮点数精度误差加上整数类型转换规则导致的问题,具体拆解如下:

  • 浮点数的存储特性:你看到的"29.0"只是显示上的近似值,实际代码中乘法运算后得到的浮点数(比如double类型)可能是一个略小于29的数值,比如28.999999999999996。这是因为二进制浮点数无法精确表示所有十进制小数,运算过程中会积累微小的精度偏差。
  • 强制类型转换的规则:当把浮点数转换为short这类整数类型时,语言会直接截断小数部分(而非四舍五入)。哪怕数值只比29小一点点,截断后都会得到28。

验证方式

你可以把这个浮点数打印到足够多的小数位来确认实际值,比如用类似这样的代码:

double result = 你的乘法运算表达式;
System.out.printf("%.20f", result);

运行后就能看到它并非精确的29.0。

解决办法

如果需要得到正确的整数结果,先对浮点数进行四舍五入,再转换为short:

short correctResult = (short) Math.round(result);

这样就能得到预期的29。

内容的提问来源于stack exchange,提问作者pengg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 04:12:32