如何在sum輸出中保持精度。我認為正在發生的事情是精度完全相同,但一種選擇選擇四舍五入。
public class Main {
public static void main(String[] args) {
final long seconds = 1637208584L;
final long micro_of_second = 795307;
final long sum = seconds micro_of_second;
System.out.println("seconds micro_of_second: " seconds micro_of_second);
System.out.println("sum: " sum);
System.out.println("equal?: " (sum == seconds micro_of_second));
}
}
輸出
seconds micro_of_second: 1637208584795307
sum: 1638003891
equal?: true
uj5u.com熱心網友回復:
這里的問題不在于精確的線
System.out.println("seconds micro_of_second: " seconds micro_of_second);
此行隱式地將seconds和轉換micro_of_second為字串并將它們連接在一起。
所以你看到的結果實際上是:
“秒 micro_of_second:” “1637208584” “795307”
您想要做的是在將整數加法添加到字串之前對其進行評估。您可以通過將該行更改為
System.out.println("seconds micro_of_second: " (seconds micro_of_second));
uj5u.com熱心網友回復:
在 Java 中,運算式是從左到右計算的。因此
"seconds micro_of_second: " seconds micro_of_second
在語意上與
("seconds micro_of_second: " seconds) micro_of_second
表達方式
"seconds micro_of_second: " seconds
計算結果為 a String,其中String秒 ( "1637208584")的 (base 10)表示附加到String "seconds micro_of_second: ". 導致String "seconds micro_of_second: 1637208584".
然后,(基體10)String的-表示micro_of_second(795307)被附加到String "seconds micro_of_second: 1637208584",導致字串seconds micro_of_second: 1637208584795307。
相比之下,seconds micro_of_second將兩個值 ( 1637208584 795307)相加,對long-value求值1638003891。
如果我們想先將兩個longs相加,我們可以通過引入括號來強制執行評估順序:
"seconds micro_of_second: " (seconds micro_of_second)
這將評估為String "seconds micro_of_second: 1638003891".
或者,如果我們想獲得微秒的總量,我們需要在添加之前乘以secondswith的值(因為一秒有微秒):1_000_000Lmicro_of_second1_000_000
"micros: " (seconds * 1_000_000L micro_of_second)
Ideone demo
順便說一句:在 Java 中,變數名應該寫在camelCase而不是snake_case( micro_of_second-> microOfSecond)
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/360243.html
下一篇:替換字串中的html內容
