首页 > 解决方案 > 函数在android中返回负值,但在flutter应用程序中返回正值

问题描述

我在 Flutter 中创建了一个 App,它是一个单位转换器,有超过 815 次转换,有 815 个函数,当我在手机上构建和安装 apk 文件时,它在一次转换时返回负整数(位到 Yottabytes),但相同函数在 web 上返回正整数。我在我的飞镖文件中导入了“飞镖:数学”

double bitsToYottabytes(double n) {return n/(8*pow(10,24));}

标签: androidflutterdart

解决方案


计算在 Web 上工作基本上是 Dart Web 实现的一个工件,其中 Dart 被转译为 JavaScript,并允许 Dart 的类型抽象在一定程度上分解。

由于8 * pow(10, 24)表达式中的值都是int文字,因此计算是通过整数算术完成的。

在 Web 上,Dartint由 JavaScript 数字原语支持,它们是双精度浮点数。

在您的手机上,您使用的是 Dart VM,其中ints 始终是具有典型固定宽度整数限制的固定宽度整数。Dart VM 使用 64 位有符号整数。最大值为 2 63 - 1,大约为 9.2×10 18。您正在尝试计算 8×10 24,它要大得多,因此您的计算会溢出并最终返回到负值。

double要解决此问题,您可以通过使用文字来强制使用浮点运算:

8 * pow(10.0, 24)

但在这种情况下,您可以直接使用double文字并避免计算:8e24.


推荐阅读