问题:Android 通过 channel 传递 1.2f 到 Dart。
期望:Dart 接收到的是 1.2f
实际:Dart 接收到的 是 1.2021211f (也可能为其他float)。
原因:float 本身就是不准的。 Android上的1.2f 是假象(虚拟机帮你构建了这个假象)。实际上也是一个很长的浮点数。
解决办法:通信的时候尽可能传递 String 类型。可以直接传递 jsonString。避免类似的问题。
细节:
近日,在写一个 Flutter Channel 的时候发现。 从 Android 传递 0.5f,1.0f,1.2f, 1.8f, 2.0f 到 Dart 时候。
0.5f, 1.0f, 2.0f 都可以正常传递。
1.2f, 1.8f 会失真。Dart 解析得到的是一个接近 1.2f, 1.8f的小数字。
看了 Flutter 代码,以为是 Hive 数据库导致的。 但是再通过断点,发现实际 Android 端传递过来的数字就是不精确的浮点数。
查询资料
浮点数是一个近似值。尽管写浮点数为 1.2f。这个数也是一个近似值。
那么怎么处理 Android 传递浮点数到 Flutter 的精度问题呢?
答案:传递一个 "1.2" 到Flutter即可。建议双端通信都使用String。