Dart/Flutter check if value is an integer/whole number


Asked by Hasen on September 19, 2019 (source).

How do I check if a value is a whole number (integer) or contains a decimal? In Javascript we have isInteger but I couldn't find the equivalent in Dart.

We seem to have checks for isEven, isOdd, isFinite, isInfinite, isNaN and isNegative but no isInteger?


Question answered by lrn (source).

Dart numbers (the type num) are either integers (type int) or doubles (type double).

It is easy to check if a number is an int, just do value is int.

The slightly harder task is to check whether a double value has an integer value, or no fractional part. There is no simple function answering that, but you can do value == value.roundToDouble(). This removes any fractional part from the double value and compares it to the original value. If they are the same, then there was no fractional part.

So, a helper function could be:

bool isInteger(num value) => 
    value is int || value == value.roundToDouble();

I use roundToDouble() instead of just round() because the latter would also convert the value to an integer, which may give a different value for large double values.