14

重複の可能性:
C# の工学表記法?

メートル法接頭辞が科学表記法よりも好ましいかどうかは議論の余地があるかもしれませんが、物理単位のユースケースがあると思います.

私は周りを見回しましたが、.NETにはそのようなものが組み込まれていないようです.それとも私はそれについて間違っていますか? それを達成する方法は何でも構いません。

明確化として: 目標は、任意の数値を、1 から 999 までの値とそれぞれのメトリック プレフィックスを持つ浮動小数点または整数文字列として表示することです。

例えば

1000 -> 1k
0.05 -> 50m

いくつかの丸めを使用して:

1,436,963 -> 1.44M

4

3 に答える 3

13

これを試してみてください。私はそれをテストしていませんが、多かれ少なかれ正しいはずです。

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;
}
于 2012-08-29T15:41:52.933 に答える
1

これらのSO Articlesおよび私自身の調査によると、数値をメートル単位でフォーマットするネイティブな方法はありません。たとえば、 MSDNのこのインターフェイス チュートリアルの拡張例など、単位を解析し、関連するメトリック測定を追加する独自のメソッドを作成する必要があります。開発に使用するメトリック単位のコーディング ライブラリを探すこともできます。

于 2012-08-29T15:19:37.460 に答える
1

数値型ごとに拡張メソッドを作成します。カスタム書式設定のために ToStringMetric() を呼び出します。

public static class Int32Extensions
{
        public static string ToStringMetric(this Int32 x) { return (x / 1000).ToString() + " K"; }
}
于 2012-08-29T15:44:39.620 に答える