dart 落镖/Flutter检查值是否为整数/整数

xxslljrj  于 2023-05-11  发布在  Flutter
关注(0)|答案(5)|浏览(364)

如何检查一个值是整数还是包含小数?在Javascript中,我们有isInteger,但我在Dart中找不到等效的。
我们似乎检查了isEvenisOddisFiniteisInfiniteisNaNisNegative,但没有isInteger

ecfdbz9o

ecfdbz9o1#

dart 号码(类型num)是整数(类型int)或双精度(类型double)。
很容易检查一个数字是否是int,只需检查value is int即可。
稍微难一点的任务是检查double值是否有整数值,或者没有小数部分。没有简单的函数可以回答这个问题,但是可以使用value == value.roundToDouble()。这将从double值中删除任何小数部分,并将其与原始值进行比较。如果它们是相同的,那么就没有小数部分。
因此,helper函数可以是:

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

我使用roundToDouble()而不仅仅是round(),因为后者也会将值转换为整数,这可能会为大的双精度值给予一个 * 不同的 * 值。

9nvpjoqh

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
e5nqia27

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
}
dced5bon

dced5bon4#

我是这样做的,效果很好:

bool _isInteger(double value) => value == value.toInt();

方法toInt()删除小数部分,所以如果删除这部分后没有任何变化,这意味着它是一个整数。

jqjz2hbq

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类型。

相关问题