Flutter 检查变量是否为 NaN

Tre*_*ree 12 dart flutter

我有var number;并且它通过一些计算得到分配。

如果我这样做,print(number);我会得到NaN回应;

我希望我能够做类似的事情

if (number is NaN)
Run Code Online (Sandbox Code Playgroud)

但我得到 NaN 没有定义。如何检查变量是否NaN处于颤动状态?

Rao*_*che 24

NAN是一个常量,所以你可以这样做

if (number == double.nan)
Run Code Online (Sandbox Code Playgroud)

你也有这样的属性isNaN但使用它,你必须提供的类型,因为它仅是提供num这么两种 doubleint

if (number.isNaN)
Run Code Online (Sandbox Code Playgroud)

  • 这是错误的 - 请检查我的答案以获得完整的解释 (8认同)

Voi*_*ler 13

您无法通过将 nan 与 double.nan 常量进行比较来检查它。isNan 是要走的路。

yourNumber.isNaN
Run Code Online (Sandbox Code Playgroud)

为什么与 double.nan 比较不起作用?

yourNumber.isNaN
Run Code Online (Sandbox Code Playgroud)

这是因为根据定义 NaN 不等于其自身。事实上,如果您想自己实现 NaN 检查,您可以这样做:

print(double.nan == double.nan);
// prints false
print(double.nan.isNaN);
// prints true
Run Code Online (Sandbox Code Playgroud)

这还会导致如果将 NaN 保存到任何其他类型的对象中,该对象将不再等于其自身(只要在比较中使用 NaN - 就像数据类一样)。这可能会导致意外的行为。您可以使用此代码来检查这种情况。

bool hasNan(Object? x) => x != x;
Run Code Online (Sandbox Code Playgroud)

一般来说,这对于我所知道的所有语言都是如此——不仅仅是 dart——因为它是一个硬件问题。


And*_*ons 6

if (!number.isNaN) print(number);
Run Code Online (Sandbox Code Playgroud)