gpt4 book ai didi

dart - 为什么我不能将 Number 转换为 Double?

转载 作者:IT王子 更新时间:2023-10-29 06:35:17 26 4
gpt4 key购买 nike

weight 是一个字段(Firestore 中的数字),设置为100

int weight = json['weight'];
double weight = json['weight'];

int weight 工作正常,按预期返回 100,但 double weight 崩溃(Object.noSuchMethod 异常) 而不是返回 100.0,这是我所期望的。

但是,以下是有效的:

num weight = json['weight'];
num.toDouble();

最佳答案

从 Firestore 解析 100 时(实际上不支持“数字类型”,但支持 converts it ),按照标准,它会被解析为 int
Dart 不会自动“巧妙地”转换这些类型。事实上,您不能将 int 转换为 double,这就是您面临的问题。如果可能的话,您的代码就可以正常工作。

解析

相反,您可以自己解析它:

double weight = json['weight'].toDouble();

类型转换

同样有效的是,将 JSON 解析为 num,然后将其分配给 double,这会将 num 转换为

double weight = json['weight'] as num;

起初这看起来有点奇怪,实际上是 Dart Analysis tool (例如内置于 VS Code 和 IntelliJ 的 Dart 插件中)会将其标记为“不必要的转换”,但事实并非如此。

double a = 100; // this will not compile

double b = 100 as num; // this will compile, but is still marked as an "unnecessary cast"

double b = 100 as num 编译因为 num is the super classdouble即使没有显式转换,Dart 也会将父类(super class)型转换为子类型。
显式转换如下:

double a = 100 as double; // does not compile because int is not the super class of double

double b = (100 as num) as double; // compiles, you can also omit the double cast

Here is a nice read关于 “Dart 中的类型和转换”

说明

发生在你身上的事情如下:

double weight;

weight = 100; // cannot compile because 100 is considered an int
// is the same as
weight = 100 as double; // which cannot work as I explained above
// Dart adds those casts automatically

关于dart - 为什么我不能将 Number 转换为 Double?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51345345/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com