2015-09-25 119 views
-1

我有一个变量这样爪哇 - 双和Int错误

int tff = 100; 
double x = (45/100) * tff; 
int y = (int) (tff - x); 
System.out.println(y); 

这应该是输出55,但为什么输出是100?

+2

因为45/100 == 0, – Tunaki

+1

你需要使用'(45/100D)* TFF;',你需要至少将其中一个变量确定为双重的,否则将是一个intiger分裂。 – SomeJavaGuy

+0

它是0.45 .-,在PHP中我可以做那个数学,但在java中,在混淆 –

回答

1

(45/100)= 0.45(45/100)是双键和 (45/100)= 0时(45/100)是整数。
所以(45/100)应转换为加倍如下:

double x = ((double)45/(double)100)* tff; 
+0

这仍然不起作用。你首先做'0'的整数部分'(45/100)',然后你把它转换成'double'。结果将是一个值为零的“双”。 – Jesper

+0

谢谢Jesper。我编辑了我的错误。 – sifho

0

45integer100integer所以45/100 == 0

你可以尝试使用45.0100.0代替

int tff = 100; 
double x = (45.0/100.0) * tff; 
int y = (int) (tff - x); 
System.out.println(y); 

或者双打,你可以投的数字:

double x = (((double)45)((double)/100)) * tff; 
+0

非常感谢:o。 –

0

如果你不投它首先是两倍。你会得到一个int。所以你的值会低于'1',java认为它是零。所以你不得不这样做:

int tff = 100; 
int value1 = 45; 
int value2 = 100; 
double x = ((double)value1/(double)value2) * tff; 
int y = (int)(tff - x); 
System.out.println(y); 

输出将是:55!

2

您需要将这些值标识为它们所代表的特定数字类型。你可以在很多例子中看到它。没有标识符的简单数字如100d100.0例如将全部作为整数来处理。

你可以在这样的数字之后使用类型的标识符。

int tff = 100; 
double x = (45/100d) * tff; 
int y = (int) (tff - x); 
System.out.println(y); 

其他您可能需要此标识符的示例可能很长。

// This wont compile since it is out of the integer range 
long l = 12312354345346; 
// This will compile since it is declared to be a long 
long l = 12312354345346l;