寻找最低精度

时间:2012-09-11 14:49:05

标签: c# algorithm string-formatting

我正在尝试使用.Net字符串格式化程序编写一个算法来查找最少数量的精确数字,以显示至少一个有效数字。

例如

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

这很好但我不禁想到有一个更优雅的解决方案。任何数学专家能帮助我吗?

2 个答案:

答案 0 :(得分:3)

略短:

int precision = (int)Math.Max(0, -Math.Floor(Math.Log10(value)));

答案 1 :(得分:1)

float是小数值的二进制表示。如果您的初始值是单个精度浮点数,则将该数字乘以指数以获取该值,

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

如果指数是非负的,根据你所说的,你会得到零(你的小数点前有数字)。

如果指数是负数,那么这很烦人,因为二进制数字与小数点不一致。不过,应该可以使用查找表。查看https://math.stackexchange.com/questions/3987/how-to-calculate-the-number-of-decimal-digits-for-a-binary-number#4080

编辑:你应该读一下浮点数的存储方式。