3 回答

TA貢獻(xiàn)1816條經(jīng)驗(yàn) 獲得超6個(gè)贊
算術(shù)中的所有操作數(shù)都不是浮點(diǎn)數(shù)-因此所有操作均使用整數(shù)算術(shù)完成,然后轉(zhuǎn)換為浮點(diǎn)數(shù)。如果將適當(dāng)?shù)牟僮鲾?shù)的類型更改為浮點(diǎn)數(shù),則可以正常工作:
float div = ((360 / 24f) / 60); // div is now 0.25
請(qǐng)注意,如果僅將60更改為浮點(diǎn)數(shù),則最終會(huì)將360/24作為整數(shù)算術(shù)執(zhí)行-在這種情況下可以使用,但不代表我真正的意圖?;旧?,您需要確保以所需的方式執(zhí)行算術(shù)運(yùn)算。

TA貢獻(xiàn)1783條經(jīng)驗(yàn) 獲得超4個(gè)贊
您實(shí)際上是在做整數(shù)除法(JLS 15.17.2)。
float div = ((360 / 24) / 60);
float div = (float) ((360 / 24) / 60);
float div = (float) (15 / 60);
float div = (float) (0);
float div = 0F;
要進(jìn)行浮點(diǎn)除法,至少一個(gè)操作數(shù)必須是浮點(diǎn)數(shù)字類型。
float div = ((360F / 24) / 60);
float div = 15F / 60;
float div = 0.25F;
提示:如果精度很重要double,則在轉(zhuǎn)換為之前,您需要使用和進(jìn)行盡可能多的計(jì)算float。實(shí)際上,除非您的分析表明您絕對(duì)需要,否則您float應(yīng)該始終選擇double。
float f;
f = (1E-17F * 1E-17F);
System.out.println(f); // prints "9.999999E-35"
f = (float) (1E-17D * 1E-17D);
System.out.println(f); // prints "1.0E-34"

TA貢獻(xiàn)1873條經(jīng)驗(yàn) 獲得超9個(gè)贊
在您的主要方法中
public static void main(String[] args){
float div = ((360 / 24) / 60);
System.out.println(div);
}
注意360、24和60都是整數(shù)值。這樣,您將獲得怪異的值。
360/24-> 15(非常好)
15/60-> 0.4(浮點(diǎn))
不幸的是,對(duì)于您來說,浮點(diǎn)數(shù)被截?cái)嗔?,因此您得到?/p>
-> 0 (integer value)
然后,通過將0賦給浮點(diǎn)變量,可以將0更改為浮點(diǎn)值0.0。因此結(jié)果。
如果要?jiǎng)澐炙鼈?,則需要將它們更改為浮點(diǎn)值。
正確的代碼應(yīng)如下所示:
public static void main(String[] args){
float div = ((360.0 / 24.0) / 60.0);
System.out.println(div);
}
添加回答
舉報(bào)