为什么+ e被取消而-e没有被取消?

时间:2018-07-20 16:58:58

标签: java numbers double notation scientific-notation

System.out.println(2e+5);

上一行的输出是

200000.0

在行的下方,

System.out.println(2e-5);

输出是

2.0e-5

为什么2e-5不能通过-10^5给出输出来解决,

0.00002

2 个答案:

答案 0 :(得分:8)

因为这是Double类chose to implement it的设计师的方式:

  

[...]

     
      
  • 如果m大于或等于10 -3 但小于10 7 ,则将其表示为m的整数部分,以十进制形式表示,无前导零,后跟“。” ('\ u002E'),后接一个或多个十进制数字,代表m的小数部分。
  •   
  • 如果m小于10 -3 或大于或等于10 7 ,则以所谓的“计算机科学计数法”表示。 [...]
  •   

他们当然可以做出另一种选择,但这就是事实。

如文档所述,如果您想要特定的格式,请使用NumberFormat来设置双精度格式。

答案 1 :(得分:0)

正如@Nizet所指出的,当将double转换为字符串时,如果位数很大,输出将具有科学计数法。这不仅仅是小数点。

考虑:

double d = 1500000000;
System.out.println(String.valueOf(d));

这将打印1.5E9

如果您希望以可读格式进行转换,请使用String.format

System.out.println(String.format ("%.0f", d));

将打印1500000000