1. ホーム
  2. c#

[解決済み】 小数点/倍数が整数であるかどうかを判断する方法は?

2022-04-05 06:10:15

質問

10進数や2進数の値が整数であるかどうかを判断するにはどうしたらよいですか?

例えば

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") . 小数点以下の値がないのであれば、それを表示しないようにします。

どのように解決するのですか?

浮動小数点数の場合 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)