小数値または倍精度数値が整数であるかどうかはどうすればわかりますか?
例えば:
decimal d = 5.0; // Would be true
decimal f = 5.5; // Would be false
または
double d = 5.0; // Would be true
double f = 5.5; // Would be false
これを知りたい理由は、.ToString("N0")
またはを使用して値を出力するかどうかをプログラムで決定できるようにするためです.ToString("N2")
。小数点値がない場合は、それを表示したくありません。
ベストアンサー1
浮動小数点数の場合、n % 1 == 0
通常は小数点の後に何かがあるかどうかを確認する方法です。
public static void Main (string[] args)
{
decimal d = 3.1M;
Console.WriteLine((d % 1) == 0);
d = 3.0M;
Console.WriteLine((d % 1) == 0);
}
出力:
False
True
更新: @Adrian Lopez が以下で述べたように、小さな値との比較ではepsilon
浮動小数点計算の誤計算が無視されます。質問は値に関するものなので、以下は浮動小数点計算の証明に関するdouble
回答になります。
Math.Abs(d % 1) <= (Double.Epsilon * 100)