次の double 値の桁数を取得しようとしています: 56.46855976 を文字列に変換せずに (そして単に "." を "" に置き換えます)。
誰かアイデアはありますか?
小数点の前の桁が得られる1->になるまで、数値を10で割る必要がある頻度を数えます。
次に、元の数値に10を掛けて、小数点以下の桁が得られるMath.Floor-result->と等しくなるまでの頻度を数えます。
追加。喜んでください。
編集:ジョーイが指摘するように、それにはいくつかの不信感があります。無限ループを作成しないように、事前に最大桁数を定義してください。一方、「デンマークの海岸はどれくらいですか?」...
文字列への変換は、あなたが持っている最良のオプションかもしれません。double
sは内部的にBase2で表されることに注意してください。したがって、表示される10進表現は、実際に格納されている値(2 53までの整数を除く)の近似値にすぎません。これは、個々の2の累乗の合計です。
したがって、2進数表現から小数点以下の桁数を把握しようとすることは、確かに簡単または簡単な作業ではありません。特に、フレームワークは、3.999999999998のような数値を4.0のように表示するために丸めを適用する場合があるため、実際よりも精度が高いように見えます。 。