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

Java Math.sqrt计算1/12时结果为0的原因分析

问题根本原因

所有计算异常的核心触发点是 Java的整数除法规则,和Math.sqrt的计算精度、T分数的业务逻辑本身无关。

第一处异常:Math.sqrt(0.0833) 与 Math.sqrt(1/12) 结果差异明显

Java的强类型运算规则规定:当除法运算符/的两个操作数都是int类型时,会执行整数截断除法——直接丢弃所有小数部分取整,不会保留数学意义上的分数结果。
你代码里写的1/12中,1和12都是不带小数点的int字面量,运算时首先执行整数除法:1 / 12 = 0(而非数学上的0.08333...)。把这个0传入Math.sqrt得到的结果就是0,和入参0.0833算出的≈0.2887存在量级上的本质差异。
你代码中那行System.out.println(Math.sqrt(1/12)); 实际控制台输出是0.0,而非预期的≈0.2887,就是这个规则导致的。

第二处异常:手写1/24相加开平方时,T分数结果始终为0

这个问题的触发逻辑和上面完全同源:

  • 代码里写的两个1/24都是整数字面量参与运算,单组计算结果都是整数截断后的0
  • 两个0相加的结果仍为0,开平方后值还是0
  • 后续计算时,这部分值作为乘数和之前算出的tempSp相乘,直接把temp值拉为0,完全偏离预期计算路径,最终得不到正确结果。

正确的修复写法

要让除法按浮点数规则保留小数,只需要让运算链路中至少有一个操作数是浮点数类型即可,常见实现方式:

  • 直接使用带小数点的字面量:1.0 / 12、1.0/24 + 1.0/24
  • 对整数做强制类型转换:(double)1 / 12

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 17:45:03