簡體   English   中英

Java為什么我的計算不能用於此代碼?

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

您是否嘗試在計算中明確指定double:

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

Math.round返回很長的....

很難從你的片段中分辨出來,因為它們不包含變量類型,但它可能是整數除法,它會殺死你。 除以兩個整數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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM