2016-10-11 5 views
0

私は人々が形状と辺の長さ/半径を入力し、面積と周囲長/周囲長を与えることができる割り当てを持っています。しかし、私が持っている問題は、私の深みからです。二重の長さが17に固定されています

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 

それでは、私は信じているが起こっているのは、二重の長さである、実際に(明らかpiは不合理である)プリントアウトされている以上のものです。私は最初のprint文を変更する場合ただし、:

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

日食そこより多くの私はいくつかのアドバイスをいただければ幸い経験した誰もがある場合は、まだ17を出力します。

答えて

3

%fString.valueOfとは異なる変換を行わないと結論づけられません。

しかし、この全目標は本当に深く働くことはありません。 doubleの「小数点以下の桁数」を測定することはできません。 0.10.2を追加すると、hereを参照して0.30000000000000004となります。やむを得ずだと doubleが保存されています。だから、 "十進数字"の数は本当に無意味になるだろう。

+0

これについてどうすればいいと思いますか?私は割り当ての桁数を得ることができる必要があり、この方法は、いくつかのクラスメートが彼らがこれについて行ったと私に言った方法です。 –

+1

'%f'の動作が異なっている理由を明確にするために、[javadoc](https://docs.oracle.com/javase/8/docs/api/java/util/Formatter.html#dndec)が指定されていない場合、デフォルト値は6です。*したがって、値の実際の精度に関係なく、両方の値が小数点の後に6桁で表示されます。 – Andreas

+0

@ConradMelcherそれは 'double'値の桁数を求める非常に奇妙な割り当てになります。正確な言葉遣いは何ですか? –

関連する問題