我如何告诉如果一个小数或双值是一个整数?

例如:

decimal d = 5.0; // Would be true
decimal f = 5.5; // Would be false

or

double d = 5.0; // Would be true
double f = 5.5; // Would be false

我想知道这一点的原因是,我可以通过编程方式确定我是否想使用. tostring(“N0”)或. tostring(“N2”)输出值。如果没有小数点,我就不写了。


当前回答

Mark Rushakoff的答案可能更简单,但以下也可以,而且可能更有效,因为没有隐式除法运算:

     bool isInteger = (double)((int)f) == f ;

and

     bool isInteger = (decimal)((int)d) == d ;

如果您希望对这两种类型都使用一个表达式,也许可以

     bool isInteger = (double)((int)val) == (double)val ;

其他回答

也许不是最优雅的解决方案,但如果你不太挑剔,它是有效的!

bool IsInteger(double num) {
    return !num.ToString("0.################").Contains(".");
}

.NET 7现在有内置的方法:

小数。IsInteger: https://learn.microsoft.com/en - us/dotnet/api/system.decimal.isinteger?view=net 7.0 翻倍。IsInteger: https://learn.microsoft.com/en - us/dotnet/api/system.double.isinteger?view=net 7.0

你可以在以下地址查看源代码:

https://github.com/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/Decimal.cs https://github.com/dotnet/runtime/blob/main/src/libraries/System.Private.CoreLib/src/System/Double.cs

有很多方法可以做到这一点。例如:

double d = 5.0;
bool isInt = d == (int)d;

你也可以用模。

double d = 5.0;
bool isInt = d % 1 == 0;

Mark Rushakoff的答案可能更简单,但以下也可以,而且可能更有效,因为没有隐式除法运算:

     bool isInteger = (double)((int)f) == f ;

and

     bool isInteger = (decimal)((int)d) == d ;

如果您希望对这两种类型都使用一个表达式,也许可以

     bool isInteger = (double)((int)val) == (double)val ;

您可以简单地将double类型与相同值的int类型转换进行比较。

double d = 5.0m;

if (d == (int)d)
{
.... 
}