String 飞镖双打vs双打串

String 飞镖双打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()相当于

在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()相当于“10.0”。 有人有解释吗?

10.0。toString()
返回“10”,而不是“10.0”。这就是为什么你会有不同的结果。这是同样的问题。因此,据我了解,我们有:

  • dart
    10.0
    在js目标上解析为
    int
    (正如链接上所说,js目标上的
    int
    double
    之间没有太大区别)
  • dart
    10.0
    在dart VM上解析为
    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
      并不等同。此外,不要为与颤振没有直接关系的问题添加颤振标签。