metric prefix是否优于scientific notation可能需要辩论,但我认为它有物理单位的用例。
我环顾四周但看起来.NET没有内置的东西,或者我错了吗?任何实现这一目标的方法都可以。
作为澄清:目标是将任何给定数字显示为浮点或整数字符串,其值介于1和999之间以及相应的度量标准前缀。
e.g。
1000 - > 1K
0.05 - > 50米
进行一些舍入:
1,436,963 - > 1.44M
答案 0 :(得分:11)
试一试。我没有测试过,但它应该或多或少是正确的。
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;
}
答案 1 :(得分:1)
根据这些SO Articles以及我自己的研究,没有以公制单位格式化数字的原生方式。您将需要编写自己的方法来解析单位并附加相关的度量标准度量,例如MSDN上此interface tutorial的扩展示例。您还可以尝试找到用于开发的metric units coding library。
答案 2 :(得分:1)
为每种数字类型创建扩展方法。您可以调用ToStringMetric()进行自定义格式化。
public static class Int32Extensions
{
public static string ToStringMetric(this Int32 x) { return (x / 1000).ToString() + " K"; }
}