android - 函数在 android 中返回负值,但在 flutter 应用程序中的 web 上返回正值

标签 android flutter dart

我在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/

相关文章:

安卓工作室 "No tests were found"

flutter - 在 Flutter 中显示 TextField 的错误文本

flutter - 为什么未定义“共享 flutter ”软件包?

java - 改造空响应

android - GridView 内的 ImageButton 不可点击

android - 执行 Espresso 测试时更改语言环境

flutter - 找不到正确的提供者

flutter - 仅当在Flutter应用程序上运行时,才能禁用某些功能吗?

sqlite - Flutter 创建 sqlite 数据库助手以仅返回 1 个字符串或任何其他单个对象类型

dart - 如何从 Web 应用程序的 lib 文件夹导入库?