可能的重复:
C# 中的工程符号?
无论是公制前缀优于科学计数法可能有争议,但我认为它有其物理单位的用例。
我环顾四周,但似乎 .NET 没有内置类似的东西,还是我弄错了?任何实现这一目标的方法都可以。
澄清一下:目标是将任何给定数字显示为浮点或整数字符串,其值在 1 到 999 之间以及相应的公制前缀。
e.g.
1000 -> 1k
0.05 -> 50m
经过一些舍入:
1,436,963 -> 1.44M
试试这个。我没有测试过,但它应该或多或少是正确的。
public string ToSI(double d, string format = null)
{
char[] incPrefixes = new[] { 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y' };
char[] decPrefixes = new[] { 'm', '\u03bc', 'n', 'p', 'f', 'a', 'z', 'y' };
int degree = (int)Math.Floor(Math.Log10(Math.Abs(d)) / 3);
double scaled = d * Math.Pow(1000, -degree);
char? prefix = null;
switch (Math.Sign(degree))
{
case 1: prefix = incPrefixes[degree - 1]; break;
case -1: prefix = decPrefixes[-degree - 1]; break;
}
return scaled.ToString(format) + prefix;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)