[英]Why use double instead of integer?
首先,第一件事:我來自php,想用java拓寬視野! 所以我看了一些書。 我看到四舍五入的數字是可能的Math.round()。
我的問題如下:如果我想將數字四舍五入為小數,必須使用以下代碼:
double number;
number = 1.111222;
number = Math.round(number*100.0) / 100.0;
或number = (digit) Math.round(number*100) / 100;
但是為什么
number = Math.round(number*100) / 100;
沒有做完全相同的事情???
提前謝謝
渣
如果假設您要為該逗號1.111222
小數點1.111222
問題是100
會將值100.0
轉換為long
值,而100.0
會將值100.0
轉換為double
。 long
不能帶小數,而double
可以帶小數。
看看這兩種情況:
情況1產生一個double
:
Math.round(1.111222*100.0) => Math.round(111.222) => 111
111/100.0 => 1.11
情況2產生一個
int
long
:
(我原本以為int
但被輸出證明是錯誤的,原因是Math.round(double)
返回此處找到的long
)
Math.round(1.111222*100) => Math.round(111) => 111
111/100 => 1 //truncated due to being a long
您可以通過運行以下代碼來查看此內容:
public static void main (String[] args)
{
double number = 1.111222;
System.out.println(Math.round(number*100.0)/100.0);
System.out.println(Math.round(number*100)/100);
Object a = Math.round(number*100.0)/100.0;
Object b = Math.round(number*100)/100;
System.out.println(a.getClass().getName());
System.out.println(b.getClass().getName());
}
哪些打印:
1.11
1
java.lang.Double
java.lang.Long
因為Math.round
返回long
。 因此,舍入( long
類型)的結果除以一個int
。 在除法之前,JVM將兩者都轉換為long
。 有關Java 擴展轉換規則,請參見此處。
在javadoc中很明顯。
Returns the closest {@code int} to the argument, with ties rounding up.
因此round(float)
返回int
, round(double)
返回long
。
當您調用Math.round()時,結果是一個整數值。 當您將兩個整數相除(例如/ 100)時,Java將執行整數除法,丟棄結果的小數部分。
當您將整數除以雙精度數(例如/ 100.0)時,Java將首先將整數轉換為雙精度值,然后執行浮點除法,保留小數部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.