Dart/Flutter check if value is an integer/whole number
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.
void main() {
int a = 10;
print(a is int); // Prints true
}
OR
void main() {
dynamic a = 10;
print(a is int ? a/10 :"Not an int"); // Prints 1
}
Use the modulo operator %:
bool isInteger(num value) => (value % 1) == 0;
Same as an extension method:
extension NumExtensions on num {
bool get isInt => (this % 1) == 0;
}
Usage:
double d = 2.6;
double d2 = 2.0;
int i = 2;
print(d.isInt); // returns false
print(d2.isInt); // returns true
print(i.isInt); // returns true