0

所以我有

double a= 199812280115

当我

System.out.println(a);

我明白了

1.9981228E13  

这种表示double a并不意味着存储的值已被更改,对吧?

4

4 回答 4

5

控制台中打印的双精度值已根据默认的 toString() 值格式化,但值保持不变。如果您希望“按原样”打印值,则应使用 aNumberFormat来格式化和打印。

于 2013-07-10T14:23:11.223 回答
1

检查您的值是否已更改的一个好方法是执行以下操作:

double a= 199812280115;
double b= 199812280000;
double c = a - b;
System.out.println(c);

如果你的替身失去了精度,你会看到自己。

于 2013-07-10T14:21:39.373 回答
1

是的,您看到的输出确实表明该值已被更改。

请注意,您只能看到小数点后的 8 位数字。该double数据类型对于小数点后 15-16 位具有足够的精度。Java 中的默认格式输出将数字与其邻居区分开来所需的最少数字,因此您应该看到所有数字。

此外,指数是错误的。预期输出为1.99812280115E11

于 2013-07-10T14:33:49.377 回答
0

你可以使用

System.out.format("%12f", a);

看到这个数字的全部荣耀。

于 2013-07-10T14:26:44.223 回答