Dart tryParse double vs string of double
Dart tryParse double vs string of double
在 Dart 中使用 tryParse 的方式似乎有些不一致,或者我正在采用一种愚蠢的方式,可能是后者。
当我们使用 int.tryParse 语句时,如果我们将 10.0 作为双精度数传递给它,我们将期望得到 10,而我们确实这样做了。
print(int.tryParse(10.0.toString())); ==> 10
如果我们将 10.0 作为字符串传递给它,它将 return 为空。
print(int.tryParse('10.0')); ==> null
我觉得这有点奇怪,因为我认为 10.0.toString() 等同于“10.0”。
有人有解释吗?
10.0.toString()
returns '10',而不是 '10.0'。这就是为什么你有不同的结果。 Here 只是同一个问题。因此,据我了解,我们有:
- dart
10.0
在 js 目标上解析为 int
(并且在 js 目标上 int
和 double
之间没有太大区别,如上所述link);
- dart
10.0
在 dart VM 上解析为 double
,但 toString
returns 该数字的最短可能文本表示,即 10
。
这似乎是一种编译器行为。我找不到报告此问题的人。也许当逗号后有零时,toString 方法会将其四舍五入。如果逗号后全为零,那么它将转换为 int.
Web 编译器和本机代码之间的区别。
当 Dart 被编译成 web 时(JavaScript),所有数字都是 JavaScript 数字,这实际上意味着加倍。
这意味着整数 10 和双精度 10.0 是同一个对象。 JavaScript 中只有“10”个值。
因此,当您对该值执行 toString
时,它必须进行选择,并且会选择 "10"
而不是 "10.0"
。
当运行原生时,双精度10.0和整数10是两个不同的对象,它们的toString
分别是"10.0"
和"10"
int.tryParse
函数不接受 "10.0"
作为输入,这就是它 returns null
的原因。
因此,在 Web 上测试时(包括 dartpad.dev),int.tryParse(10.0.toString())
成功,因为 toString
是 "10"
,而在本机测试时,相同的代码给出 null
,因为toString
是 "10.0"
.
在 Dart 中使用 tryParse 的方式似乎有些不一致,或者我正在采用一种愚蠢的方式,可能是后者。
当我们使用 int.tryParse 语句时,如果我们将 10.0 作为双精度数传递给它,我们将期望得到 10,而我们确实这样做了。
print(int.tryParse(10.0.toString())); ==> 10
如果我们将 10.0 作为字符串传递给它,它将 return 为空。
print(int.tryParse('10.0')); ==> null
我觉得这有点奇怪,因为我认为 10.0.toString() 等同于“10.0”。 有人有解释吗?
10.0.toString()
returns '10',而不是 '10.0'。这就是为什么你有不同的结果。 Here 只是同一个问题。因此,据我了解,我们有:
- dart
10.0
在 js 目标上解析为int
(并且在 js 目标上int
和double
之间没有太大区别,如上所述link); - dart
10.0
在 dart VM 上解析为double
,但toString
returns 该数字的最短可能文本表示,即10
。
这似乎是一种编译器行为。我找不到报告此问题的人。也许当逗号后有零时,toString 方法会将其四舍五入。如果逗号后全为零,那么它将转换为 int.
Web 编译器和本机代码之间的区别。
当 Dart 被编译成 web 时(JavaScript),所有数字都是 JavaScript 数字,这实际上意味着加倍。
这意味着整数 10 和双精度 10.0 是同一个对象。 JavaScript 中只有“10”个值。
因此,当您对该值执行 toString
时,它必须进行选择,并且会选择 "10"
而不是 "10.0"
。
当运行原生时,双精度10.0和整数10是两个不同的对象,它们的toString
分别是"10.0"
和"10"
int.tryParse
函数不接受 "10.0"
作为输入,这就是它 returns null
的原因。
因此,在 Web 上测试时(包括 dartpad.dev),int.tryParse(10.0.toString())
成功,因为 toString
是 "10"
,而在本机测试时,相同的代码给出 null
,因为toString
是 "10.0"
.