[英]Java why doesn't my calculation work on this code?
嗨我正在尝试运行计算,但我似乎无法将它全部放在一行上,我必须将结果分成两个单独的行来实现所需的结果(这看起来有点长啰嗦)。 谁能解释我哪里出错?
x和y都是双打。
例1 :(不正确)
y=0.68
x= (Math.round(y* 10))/10;
result x=0
例2 :(正确)
y=0.68
x= Math.round(y* 10);
x = x/10;
result x=0.7
谢谢你的时间。
Math.round
返回long
类型的变量(参见: Javadoc ),这意味着除以10
的除法是对一个long
变量执行的,导致另一个long
变量 - 这就是你失去精度的原因。
要使它计算为double
并返回double
- 你必须像这样抛出Math.round
的结果:
x= ((double)Math.round(y* 10))/10;
很难从你的片段中分辨出来,因为它们不包含变量类型,但它可能是整数除法,它会杀死你。 除以两个整数x和y,其中x <y,得到零:
int x = 4;
int y = 10;
int z = x/y; // this is zero.
当你写:
double x = (Math.round(y* 10))/10;
(Math.round(y* 10))
是一个long(= 7),除以10,得到另一个long(= 0)。 然后将结果转换回double并存储在x中。
在你的第二个片段中:
double x = Math.round(y* 10);
这等于7并转换为double。 然后x / 10
是一个返回0.7的双重操作。
y=0.68
x= (Math.round(y* 10)) <--- Evaluated as int since Math.round returns int /10; <-- integer division
result x=0
y=0.68
x= Math.round(y* 10) <-- x is stored as double
x = x/10; <-- double division
result x=7
我想这是因为Math.round返回long或int,具体取决于y是double还是float。 那么你有一个整数除法。 在第二个例子中,x已经是一个双倍,这就是为什么你有一个双重划分。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.