Java为什么我的计算不能用于此代码?

时间:2012-03-27 09:42:30

标签: java

嗨我正在尝试运行计算,但我似乎无法将它全部放在一行上,我必须将结果分成两条单独的行来实现所需的结果(这看起来有点长啰嗦)。 谁能解释我哪里出错?

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
谢谢你的时间。

6 个答案:

答案 0 :(得分:1)

Math.round返回long类型的变量(请参阅:Javadoc),这意味着10的除法是在long变量上执行的,另一个long变量 - 这就是你失去精度的原因。

要使其在double上进行计算并返回double - 您必须像这样投射Math.round的结果:

x= ((double)Math.round(y* 10))/10;

答案 1 :(得分:1)

您是否尝试在计算中明确指定double:

x = ((double)Math.round( y * 10.0)) / 10.0;

Math.round返回长篇....

答案 2 :(得分:0)

很难从你的片段中分辨出来,因为它们不包含变量类型,但它可能是整数除法,它会杀死你。当你将两个整数x和y分开时,其中x<你得到零:

int x = 4;
int y = 10;
int z  = x/y; // this is zero.

答案 3 :(得分:0)

当你写:

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的双重操作。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我想这是因为Math.round返回long或int,具体取决于y是double还是float。那么你有一个整数除法。 在第二个例子中,x已经是一个双倍,这就是为什么你有一个双重分裂。