android - 函数在android中返回负值,但在flutter应用程序中返回正值
问题描述
我在 Flutter 中创建了一个 App,它是一个单位转换器,有超过 815 次转换,有 815 个函数,当我在手机上构建和安装 apk 文件时,它在一次转换时返回负整数(位到 Yottabytes),但相同函数在 web 上返回正整数。我在我的飞镖文件中导入了“飞镖:数学”
double bitsToYottabytes(double n) {return n/(8*pow(10,24));}
解决方案
计算在 Web 上工作基本上是 Dart Web 实现的一个工件,其中 Dart 被转译为 JavaScript,并允许 Dart 的类型抽象在一定程度上分解。
由于8 * pow(10, 24)
表达式中的值都是int
文字,因此计算是通过整数算术完成的。
在 Web 上,Dartint
由 JavaScript 数字原语支持,它们是双精度浮点数。
在您的手机上,您使用的是 Dart VM,其中int
s 始终是具有典型固定宽度整数限制的固定宽度整数。Dart VM 使用 64 位有符号整数。最大值为 2 63 - 1,大约为 9.2×10 18。您正在尝试计算 8×10 24,它要大得多,因此您的计算会溢出并最终返回到负值。
double
要解决此问题,您可以通过使用文字来强制使用浮点运算:
8 * pow(10.0, 24)
但在这种情况下,您可以直接使用double
文字并避免计算:8e24
.
推荐阅读
- javascript - 需要跟踪 setTimeout 调用以防我以后需要取消它们?
- python - 警告:找不到包文件夹或虚拟环境。ModuleNotFoundError:Azure 应用服务中没有名为“xxxxx”的模块
- php - 如何在csv中写入更改的文件内容
- sql-server - SSIS - Oracle 全局临时表不保留下一个任务的记录
- hadoop - HDFS 和 Databricks DBFS 之间的主要区别是什么?
- c# - 我可以使用 adb 和 C# 运行 .vcf 文件吗
- c++ - 在 Xcode 中运行的 C++ 程序,但不是在 Eclipse 中运行
- javascript - 函数返回未定义且数组未更新
- javascript - 单击事件侦听器不适用于 VueJS 中的组件
- android - 复选框示例 android 资源编译失败