C# 寻找最小精度

C# 寻找最小精度,c#,algorithm,string-formatting,C#,Algorithm,String Formatting,我正在尝试编写一个算法,使用.Net字符串格式化程序查找至少显示一个有效数字的最小精度位数 例如 所需的值精度: ----- ----------------- 10 0 1 0 零点一一 零点九九一 零点零一二 零点零零九三 (不关心其他数字,只关心第一个数字,因此0.99只需要1的精度。) 我能想到的最好办法是: int precision = (int)Math.Abs(Math.Min(0, Math.Floor(Math.Log10(valu

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

例如

所需的
值精度:
-----      -----------------
10         0
1         0
零点一一
零点九九一
零点零一二
零点零零九三
(不关心其他数字,只关心第一个数字,因此0.99只需要1的精度。)

我能想到的最好办法是:

int precision = (int)Math.Abs(Math.Min(0, Math.Floor(Math.Log10(value))));
这很好,但我忍不住想有一个更优雅的解决方案。有数学大师能帮我吗?

稍微短一点:

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

浮点是分数的二进制表示形式。如果初始值是单精度浮点数,则该数字乘以指数即可得到该值

((f & 0x7f800000) >> 23)-127 .
如果指数是非负的,根据你所说的,你会得到零(小数点之前有数字)

如果指数是负数,那就很烦人了,因为二进制数字和十进制数字不一致。不过,通过查找表应该是可行的。退房


编辑:您应该了解浮点数的存储方式。

一个“更简单”的解决方案可能会利用IEEE浮点数表示法。NB 0.99四舍五入到一个有效数字不是0.9,而是1-我不确定您是否介意。@Rawling指出,但我没有实际显示值,谢谢。