事情是这个样子的
double d = 125;
在执行完语句
d = Math.pow(d,(double)1/3);
之后
d = 4.9999999999999;
请问怎么才能得到正确结果
已得到解决办法,使用strictMath方法
勘误:StrictMath.pow(double a,double b)方法也不行,不够准确,当d = 1000时
执行
d = StrictMath.pow(d, (double)1/3);
之后 d = 9.99999999998;
求大神指点
浮点数的误差在所难免,你可以对结果用 Math.Round 四舍五入,或者使用符号运算的方式求精确值
这里出现的问题是因为你的(double)1/3的问题,1/3本身是个分数,他是0.333...(无限循环小数),而针对于这种数字2进制没法精确的表示出来,就好像2进制没法表示0.1一样。这边可以直接用Math.round四舍五入掉,取精确值