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
?
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() .
To check whether a string is a numeric string, you can use the double. tryParse() method. If the return equals null then the input is not a numeric string, otherwise, it is.
To check if a float value is a whole number with Python, we can use the is_integer method. to check if 1.0 is an integer by calling is_integer on it. It'll return True if it is and False otherwise.
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.
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
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
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With