小数点/倍精度数が整数かどうかを判断するにはどうすればいいですか? 質問する

小数点/倍精度数が整数かどうかを判断するにはどうすればいいですか? 質問する

小数値または倍精度数値が整数であるかどうかはどうすればわかりますか?

例えば:

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)

おすすめ記事