3

ダブルがあり、小数に変換する必要があります。値が大きすぎる/小さすぎる場合、結果はdecimal.MaxValue/decimal.MinValueになります。これを行うための最良の方法は何ですか?

4

2 に答える 2

3

これは不可逆変換であり、可能であれば回避する必要があることを理解していると思いますか?本当に必要な場合:

private static readonly double MaxDecimalAsDouble = (double) decimal.MaxValue;
private static readonly double MinDecimalAsDouble = (double) decimal.MinValue;

...
public decimal ConvertWithCap(double input)
{
    return input >= MaxDecimalAsDouble ? decimal.MaxValue
         : input <= MinDecimalAsDouble ? decimal.MinValue
         : (decimal) input;
}

このようにして、値の観点から上限がチェックdoubleされますが、10進数値としてハードコードされた上限値が返されます。doubleこれにより、の最大値/最小値を正確に表すことができないという問題を回避できますdecimal

(の最大スケールでもdecimal、連続する整数を表すことができますが、そうではありませんdouble。)

于 2012-09-25T09:43:53.977 に答える
0

ダブルの大小の値は何だと思いますか?elseステートメントでうまくいくかどうかは簡単だと思います

public decimal getDecimal(double value,double large,double small)
{

    if(value <= large && value >= small)
     return (decimal) value;
    else if (value>large)
     return decimal.MaxValue;
    else
     return decimal.MinValue;
}

これはサイトに入力されただけなので、構文とスペルはご容赦ください

于 2012-09-25T09:49:37.183 に答える