3

.Net文字列フォーマッタを使用して、少なくとも1つの有効数字を表示するための最小精度桁数を見つけるアルゴリズムを作成しようとしています。

例えば。

Value      Precision wanted:
-----      -----------------
10         0
 1         0
 0.1       1
 0.99      1   
 0.01      2
 0.009     3

(それ以上の数字は気にしないでください。最初の数字だけなので、0.99の精度は1だけです。)

私が思いつくことができる最高のものは次のとおりです。

int precision = (int)Math.Abs(Math.Min(0, Math.Floor(Math.Log10(value))));

これは問題なく機能しますが、もっとエレガントな解決策があると思わずにはいられません。数学の達人が私を助けてくれますか?

4

2 に答える 2

3

少し短い:

int precision = (int)Math.Max(0, -Math.Floor(Math.Log10(value)));
于 2012-09-11T14:56:19.803 に答える
1

floatは、小数値のバイナリ表現です。初期値が単精度浮動小数点数の場合、数値に指数を掛けて値を取得します。

((f & 0x7f800000) >> 23)-127 .

指数が負でない場合は、あなたが言ったことに基づいて、ゼロに戻ります(小数点の前に数値があります)。

指数が負の場合、2進数は小数とうまく一致しないため、これは厄介です。ただし、ルックアップテーブルで実行できるはずです。https://math.stackexchange.com/questions/3987/how-to-calculate-the-number-of-decimal-digits-for-a-binary-number#4080を確認してください。

編集:浮動小数点数の格納方法について読む必要があります。

于 2012-09-11T17:08:10.220 に答える