5

私はこのような方法を持っています:

Prefix GetPrefix(decimal value)
{
    if(value > 11000000000000000000)
        return Prefix.CosmicBig;
    if(value > 1000000000000000)
        return Prefix.ReallyBig;
    if(value > 3000000000000)
        return Prefix.Big;
    if(value > 50000000)
        return Prefix.Okay;
    if(value > 750000)
        return Prefix.MostlyNormal;
    if(value > 750000)
        return Prefix.SoSo;
    if(value > 750)
        return Prefix.Small;
    return Prefix.MiserablySmall;
}

正確な値は重要ではありません。重要なのは、それらが時々変更されることです (プレフィックスは描画に使用され、一部のテキスト領域は開発中にサイズが変更されます)。私は、これらのリテラルを、すべてのゼロを数えなくても、人間が簡単に変更できる方法で書く方法を探しています。セパレーターがいいでしょう。私は書くことを考えました11 * 1000 * 1000 * 1000 * 1000 * 1000 * 1000が、それはかろうじて扱いやすいものです。を使用Math.Pow()すると少しは良くなりますが、そのような計算を使用して定数を定義することに慣れていません。

4

2 に答える 2

22

代わりに11000000000000000000を使用できます11e18mこれが小数であることを示すために使用します。したがって、 11e18m

于 2013-03-01T09:25:38.443 に答える
16

次の拡張メソッドを導入できますint

750.Thousand();
5.Million();
100.Billion();

これらのメソッドの実装は簡単です。

public static int Thousand(this int value)
{
    return value * 1000;
}

public static int Million(this int value)
{
    return value.Thousand() * 1000;
}

// etc.

数値が大きい場合は、メソッドに適切なデータ型を返すようにしてください。

public static long Billion(this int value)
{
    return value.Million() * 1000;
}

残念ながら、サポートするすべての整数型または浮動小数点型に対してこれらのメソッドを作成する必要があります。

このような拡張メソッドの完全なセットがあると、最後にすべてがゼロであるだけでなくても、比較的自然な方法で多数を表現できます。

100.Billion() + 30.Thousand() + 300 // == 100,000,030,300

あなたが空想を得たいならば、あなたはそれらを入れ子にすることを考えることさえできます:

100.Billion(30.Thousand(300))

しかし、パラメータが何を意味するのか不思議に思うので、表現力が失われると思います。

それでも、実装は次のようになります。

public static long Billion(this int value, long add)
{
    return value.Million() * 1000 + add;
}

これらの拡張メソッドを使用することには、1つの小さな欠点があります。それは、数値がコンパイル時定数ではなくなったことです。それらは実行時に計算されます。ほとんどの場合、これは問題にはなりません。

于 2013-03-01T09:26:43.593 に答える