我有一项作业,可以让人们输入形状和边长/半径,并给出面积和周长/周长。但是,我遇到的问题超出了我的理解范围。

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());


这是代码。之前输入了半径。如果有什么不同,则面积为双精度,用户输入的值为整数。因此,代码的输出为:

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


因此,我相信正在发生的事情是double的长度实际上大于打印出来的长度(显然pi是不合理的)。但是,当我将第一个打印语句更改为:

System.out.println("Total number of digits in the circumference is: " + (areaString.length()-1));


eclipse仍会打印出17。如果那里有人更有经验,我将不胜感激。

最佳答案

结论似乎无法避免%fString.valueOf进行不同的转换。

但是要退后一步:这整个目标实际上是非常不可行的。测量double中的“小数位数”不是您可以做的事情。如果添加0.10.2,则会得到0.30000000000000004,请参见heredouble的存储方式不可避免。因此,“十进制数字”的数量实际上将毫无意义。

07-25 23:47
查看更多