双倍长度卡在17

时间:2016-10-11 22:26:12

标签: java

我有一项任务,让人们输入形状和边长/半径,并给出一个面积和周长/周长。然而,我遇到的问题是我的深度。

switch

这是代码。之前输入了半径。如果它有任何区别,则该区域为double,并且用户输入的值为整数。所以代码的输出是:

area = (Math.PI) * (radius) * (radius);
circumference = 2 * Math.PI * radius;
System.out.printf("The circumference is: %f\n", circumference);
System.out.printf("The area is: %f\n", area);
String areaString = String.valueOf(area);
String perimeterString = String.valueOf(circumference);
System.out.println("Total number of digits in the circumference is: " + areaString.length());
System.out.println("Total number of digits in the area is: " + perimeterString.length());

所以我认为正在发生的是双倍的长度实际上比被打印出来的更多(显然pi是不合理的)。但是,当我将第一个print语句更改为:

The circumference is: 69.115038
The area is: 380.132711
Total number of digits in the circumference is: 17
Total number of digits in the area is: 17
eclipse仍打印出17.如果有更多有经验的人我会感激一些建议。

1 个答案:

答案 0 :(得分:3)

%fString.valueOf进行的转换不同,结论似乎是不可避免的。

但退一步说:这整个目标确实非常深刻无法发挥作用。测量double中的“小数位数”不是您可以做的事情。如果您添加0.10.2,则会获得0.30000000000000004,请参阅here。以double的方式存储不可避免的。所以“十进制数字”的数量实际上是毫无意义的。