如何检查一个值是整数还是包含小数?在Javascript中,我们有isInteger,但我在Dart中找不到等效的。我们似乎检查了isEven,isOdd,isFinite,isInfinite,isNaN和isNegative,但没有isInteger?
isInteger
isEven
isOdd
isFinite
isInfinite
isNaN
isNegative
ecfdbz9o1#
dart 号码(类型num)是整数(类型int)或双精度(类型double)。很容易检查一个数字是否是int,只需检查value is int即可。稍微难一点的任务是检查double值是否有整数值,或者没有小数部分。没有简单的函数可以回答这个问题,但是可以使用value == value.roundToDouble()。这将从double值中删除任何小数部分,并将其与原始值进行比较。如果它们是相同的,那么就没有小数部分。因此,helper函数可以是:
num
int
double
value is int
value == value.roundToDouble()
bool isInteger(num value) => value is int || value == value.roundToDouble();
我使用roundToDouble()而不仅仅是round(),因为后者也会将值转换为整数,这可能会为大的双精度值给予一个 * 不同的 * 值。
roundToDouble()
round()
9nvpjoqh2#
使用模运算符%:
bool isInteger(num value) => (value % 1) == 0;
与扩展方法相同:
extension NumExtensions on num { bool get isInt => (this % 1) == 0; }
使用方法:
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
e5nqia273#
void main() { int a = 10; print(a is int); // Prints true }
或
void main() { dynamic a = 10; print(a is int ? a/10 :"Not an int"); // Prints 1 }
dced5bon4#
我是这样做的,效果很好:
bool _isInteger(double value) => value == value.toInt();
方法toInt()删除小数部分,所以如果删除这部分后没有任何变化,这意味着它是一个整数。
toInt()
jqjz2hbq5#
要检查Dart中任何变量的数据类型,您可以使用关键字 is。例如:
void main() { int x = 10; double y = 20; checkType(x, y); } void checkType(dynamic x, dynamic y) { if (x is int) { print(x); } else { print(y); } }
上面的代码将打印10,因为main函数中的变量 x 是Integer Data类型。
5条答案
按热度按时间ecfdbz9o1#
dart 号码(类型
num
)是整数(类型int
)或双精度(类型double
)。很容易检查一个数字是否是
int
,只需检查value is int
即可。稍微难一点的任务是检查
double
值是否有整数值,或者没有小数部分。没有简单的函数可以回答这个问题,但是可以使用value == value.roundToDouble()
。这将从double
值中删除任何小数部分,并将其与原始值进行比较。如果它们是相同的,那么就没有小数部分。因此,helper函数可以是:
我使用
roundToDouble()
而不仅仅是round()
,因为后者也会将值转换为整数,这可能会为大的双精度值给予一个 * 不同的 * 值。9nvpjoqh2#
使用模运算符%:
与扩展方法相同:
使用方法:
e5nqia273#
或
dced5bon4#
我是这样做的,效果很好:
方法
toInt()
删除小数部分,所以如果删除这部分后没有任何变化,这意味着它是一个整数。jqjz2hbq5#
要检查Dart中任何变量的数据类型,您可以使用关键字 is。例如:
上面的代码将打印10,因为main函数中的变量 x 是Integer Data类型。