如何简单地截断数字以供显示
How to simply truncate a number for display
我想知道将数字转换为截断和舍入形式的最简单方法。
我知道很多方法来做到这一点 "manually"(手动截断,在后面加上逗号然后将数字四舍五入)但我认为有更简单的方法来做到这一点(可能使用数学方法)。
示例:
1 234 567 应该变成 1,2 M
1 567 890 应该变成 1.6 M
类似的东西:
static string FormatNumber(uint n)
{
if (n < 1000)
return n.ToString();
if (n < 10000)
return String.Format("{0:#,.##}K", n - 5);
if (n < 100000)
return String.Format("{0:#,.#}K", n - 50);
if (n < 1000000)
return String.Format("{0:#,.}K", n - 500);
if (n < 10000000)
return String.Format("{0:#,,.##}M", n - 5000);
if (n < 100000000)
return String.Format("{0:#,,.#}M", n - 50000);
if (n < 1000000000)
return String.Format("{0:#,,.}M", n - 500000);
return String.Format("{0:#,,,.##}B", n - 5000000);
}
会给你这个输出:
1249 1.24K
12499 12.4K
124999 124K
1249999 1.24M
12499999 12.4M
124999999 124M
1249999999 1.24B
我认为没有内置库可以执行此操作。
以 10 为底的对数的整数部分为您提供科学记数法中出现的指数。
如果您想要 s
有效数字,通过除以 10 的指数进行归一化,重新调整为 s-1
并四舍五入。
e= floor(log10(x)); // => e = 6
x= Round(x * pow(10, s - 1 - e)); // => x = 12, x = 16
我想知道将数字转换为截断和舍入形式的最简单方法。
我知道很多方法来做到这一点 "manually"(手动截断,在后面加上逗号然后将数字四舍五入)但我认为有更简单的方法来做到这一点(可能使用数学方法)。
示例:
1 234 567 应该变成 1,2 M
1 567 890 应该变成 1.6 M
类似的东西:
static string FormatNumber(uint n)
{
if (n < 1000)
return n.ToString();
if (n < 10000)
return String.Format("{0:#,.##}K", n - 5);
if (n < 100000)
return String.Format("{0:#,.#}K", n - 50);
if (n < 1000000)
return String.Format("{0:#,.}K", n - 500);
if (n < 10000000)
return String.Format("{0:#,,.##}M", n - 5000);
if (n < 100000000)
return String.Format("{0:#,,.#}M", n - 50000);
if (n < 1000000000)
return String.Format("{0:#,,.}M", n - 500000);
return String.Format("{0:#,,,.##}B", n - 5000000);
}
会给你这个输出:
1249 1.24K
12499 12.4K
124999 124K
1249999 1.24M
12499999 12.4M
124999999 124M
1249999999 1.24B
我认为没有内置库可以执行此操作。
以 10 为底的对数的整数部分为您提供科学记数法中出现的指数。
如果您想要 s
有效数字,通过除以 10 的指数进行归一化,重新调整为 s-1
并四舍五入。
e= floor(log10(x)); // => e = 6
x= Round(x * pow(10, s - 1 - e)); // => x = 12, x = 16