我在Flutter中创建了一个应用程序,它是一个单位转换器,有超过815种转换,有815个函数,当我在手机上构建并安装apk文件时,它在一次转换中返回负整数(位到Yottabytes),但相同的函数在网络上返回正整数。 我已在 dart 文件中导入了“dart:math”
double bitsToYottabytes(double n) {return n/(8*pow(10,24));}
最佳答案
Web 上的计算工作基本上是 Dart Web 实现的产物,其中 Dart 被转换为 JavaScript,并允许 Dart 的类型抽象在某种程度上被破坏。
由于 8 * pow(10, 24)
表达式中的值都是 int
文字,因此计算是通过整数算术完成的。
在网络上,Dart int
由 JavaScript 数字原语支持,它们是 double 浮点指针数字。
在您的手机上,您使用的是 Dart VM,其中 int
始终是具有典型固定宽度整数限制的固定宽度整数。 Dart VM 使用 64 位有符号整数。最大值为 263 - 1,大约为 9.2×1018。您正在尝试计算 8×1024,该值要大得多,因此您的计算会溢出并最终返回负值。
要解决此问题,您可以通过使用 double
文字强制使用浮点运算:
8 * 战俘(10.0, 24)
但在这种情况下,您可以直接使用 double
文字并避免计算:8e24
。
关于android - 函数在 android 中返回负值,但在 flutter 应用程序中的 web 上返回正值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62231153/