Dart/Flutter如何检查值是否为整数?无isInteger方法解决方案
在Dart中检查值是否为整数或包含小数的解决方案
嘿,我懂你的困扰——Dart确实没有JavaScript里那种现成的isInteger方法,但咱们完全可以通过几个简单的方式实现这个需求,不管是判断一个值是否为整数,还是检查它是否包含小数,都能轻松搞定。
方法一:利用类型判断与数值对比
首先,Dart里的数值类型分为int和double,我们可以先判断是否是int类型,对于double类型则判断它转成整数后是否和自身相等:
bool isInteger(num value) { // 先判断是否是int类型,或者是等于自身整数形式的double return value is int || (value is double && value == value.toInt()); }
举个实际测试的例子:
isInteger(10)→true(本身就是int类型)isInteger(10.0)→true(double类型但数值等于整数)isInteger(10.5)→false(double类型且包含小数部分)
方法二:使用取余运算更简洁
另一种更简洁的方式是利用对1取余等于0的特性——所有整数(包括int和值为整数的double)对1取余的结果都是0,而带小数的double则不是。同时我们可以先过滤掉NaN、无穷大这类无效数值:
bool isInteger(num value) { // 排除NaN、无穷大这类不符合要求的特殊值 if (!value.isFinite) return false; return value.remainder(1) == 0; }
这个方法能自动兼容int和double类型,不用额外做类型判断,逻辑更紧凑。
检查是否包含小数
如果要判断一个值是否包含小数部分,只需要对上面的isInteger方法取反即可:
bool hasDecimal(num value) { return !isInteger(value); }
测试效果:
hasDecimal(10.5)→truehasDecimal(10)→falsehasDecimal(10.0)→false
这样就能完美替代你想要的isInteger功能啦,根据你的场景选合适的方法就行~
内容的提问来源于stack exchange,提问作者Hasen
相关产品推荐
相关产品推荐

