java如何在打印时添加长字符并保持精度
如何在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
# 1 楼答案
在Java中,表达式从左到右求值。因此
在语义上与相同
表情
计算为
String
,其中秒("1637208584"
)的(基数10)String
表示形式被附加到String "seconds + micro_of_second: "
。导致String "seconds + micro_of_second: 1637208584"
然后,将
micro_of_second
(795307
)的(基10)String
-表示形式附加到String "seconds + micro_of_second: 1637208584"
上,从而产生字符串seconds + micro_of_second: 1637208584795307
相比之下,
seconds + micro_of_second
将两个值(1637208584 + 795307
)相加,计算值为long
-value1638003891
如果我们想首先添加两个
long
,我们可以通过引入括号强制执行求值顺序:这将计算为
String "seconds + micro_of_second: 1638003891"
或者,如果我们想要得到微秒的总量,我们需要在添加
micro_of_second
之前将seconds
的值乘以1_000_000L
(因为一秒钟内有1_000_000
微秒):Ideone demo
旁白:在Java中,变量名应该用
camelCase
而不是snake_case
(micro_of_second
->;microOfSecond
)来编写# 2 楼答案
这里的问题不在于它的精确性
此行隐式地将
seconds
和micro_of_second
转换为字符串,并将它们连接在一起所以你看到的结果实际上是:
“秒+微秒:”+“1637208584”+“795307”
您要做的是在将整数加法添加到字符串之前对其求值。您可以通过将该行更改为