一尘不染

如何确定小数/双精度数是否为整数?

c#

如何判断小数或双精度值是整数?

例如:

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")。如果没有小数点值,那么我不想显示出来。


阅读 365

收藏
2020-05-19

共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)
2020-05-19