String 飞镖双打vs双打串
在Dart中使用tryParse的方式似乎有一些不一致之处,或者我打算用一种愚蠢的方式,很可能是后者 当我们使用int.tryParse语句时,如果我们将其作为双精度传递10.0,我们将期望得到10String 飞镖双打vs双打串,string,parsing,dart,double,String,Parsing,Dart,Double,在Dart中使用tryParse的方式似乎有一些不一致之处,或者我打算用一种愚蠢的方式,很可能是后者 当我们使用int.tryParse语句时,如果我们将其作为双精度传递10.0,我们将期望得到10 print(int.tryParse(10.0.toString())); ==> 10 如果我们将其作为字符串传递10.0,它将返回null print(int.tryParse('10.0')); ==> null 我觉得这有点奇怪,因为我认为10.0.toString()相当于
print(int.tryParse(10.0.toString())); ==> 10
如果我们将其作为字符串传递10.0,它将返回null
print(int.tryParse('10.0')); ==> null
我觉得这有点奇怪,因为我认为10.0.toString()相当于“10.0”。
有人有解释吗?10.0。toString()
返回“10”,而不是“10.0”。这就是为什么你会有不同的结果。这是同样的问题。因此,据我了解,我们有:
- dart
在js目标上解析为10.0
(正如链接上所说,js目标上的int
和int
之间没有太大区别)李>double
- dart
在dart VM上解析为10.0
,但double
返回该数字的最短文本表示形式,即toString
10
- 这似乎是一种编译器行为。我找不到报告此问题的人。也许当逗号后面有零时,toString方法会将其四舍五入。如果逗号后都是零,那么它将转换为int。区别在于web编译器和本机代码之间的区别
当Dart被编译到web(到JavaScript)时,所有数字都是JavaScript数字,这实际上意味着加倍。
这意味着整数10和双精度10.0是同一个对象。JavaScript中只有“10”值。
因此,当您对该值执行
toString
操作时,它必须选择,并且它选择“10”
而不是“10.0”
当本机运行时,double 10.0和integer 10是两个不同的对象,它们的toString
s分别是“10.0”
和“10”
int.tryParse
函数不接受“10.0”
作为输入,这就是它返回null
的原因。
因此,在web(包括dartpad.dev)上测试时,
int.tryParse(10.0.toString())
成功,因为toString
是“10”
,而在本机测试时,相同的代码给出null
,因为toString
是“10.0”
您是在dartpad还是在Flitter/Dart应用程序中进行测试。我已经在Flitter和dartpad中进行了测试。我最初在颤振中遇到问题,然后在Dartpad中测试。您可以很容易地测试并发现10.0。正如答案所示,toString()
与10.0
并不等同。此外,不要为与颤振没有直接关系的问题添加颤振标签。