使用指标前缀格式化数字?

可能重复:
C#中的工程符号?

公制前缀是否优于科学记数法可能有争议,但我认为它具有物理单位的用例。

我环顾四周但似乎.NET没有内置的东西,或者我错了吗? 任何实现这一目标的方法都可以。

作为澄清:目标是将任何给定数字显示为浮点或整数字符串,其值介于1和999之间以及相应的度量标准前缀。

例如

1000 – > 1k
0.05 – > 50米

有些舍入:

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

根据这些SO 文章和我自己的研究,没有本地方法来以公制单位格式化数字。 您需要编写自己的方法来解析单元并附加相关的度量标准度量,例如MSDN上此接口教程的扩展示例。 您还可以尝试查找用于开发的度量单位编码库 。

为每种数字类型创建扩展方法。 您可以为自定义格式调用ToStringMetric()。

 public static class Int32Extensions { public static string ToStringMetric(this Int32 x) { return (x / 1000).ToString() + " K"; } }