[英]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.