当前位置: 首页 > 知识库问答 >
问题:

如果值不是分数,Dart-int.toDouble()仍然会将runTimeType设为int

关项明
2023-03-14

Dart版本2.10.0

我使用flutter Dart作为后端,并遇到了一个问题,其中一个字段的值为1时,存储(后json_seralizer)到一个变量类型双,虽然成功,其运行时仍然int。

当将双变量值分配给另一个错误类型为“int”的双变量不是“double”类型的子类型时,这会显示为运行时错误在类型转换中。

例如:-在Firestore中-

飞镖级-

通过连载

rateValue = (rValue as num)?.toDouble()

然后后来,

double currencyExchangeRate;
currencyExchangeRate = rateValue //throws error at runtime type 'int' is not a subtype of type 'double?' in type cast

Dartpad示例代码查看问题,

import 'dart:math' as math;
void main() {
 
  math.Random rand = math.Random();
  
  int x = rand.nextInt(10);
  
  double a = x.toDouble();
  double b = (x as num).toDouble();
  
  print ('a is $a and ${a.runtimeType} and b is $b and ${b.runtimeType}');
  
}

//Above code prints "a is 7 and int and b is 7 and int"

我已经为同一个问题搜索了很多stackoverflow帖子,但到目前为止没有一个有用。

即使使用显式转换并且没有动态变量,双变量(a和b)仍然显示int的运行时类型。

我如何才能成功地分配当前的汇率=rateValue并防止此运行时错误?

谢谢

共有1个答案

欧桐
2023-03-14

我已经在我自己的颤振飞镖代码中找到了我特别面临的问题的原因。

在dartjson_serializer可用之前,我有自己的手动铸造从火还原数据到类,代码没有使用. toDouble()方法转换。因此,值1仍然被视为整数,而不是双数。

json_seralizer使用fromJson和toJson方法创建的分部类在目标类中将图1正确地转换为double。

我已经删除了自己的序列化程序代码,现在在这个实例中依赖json_序列化程序生成的代码(无论如何,我总是这样做)。

所以,dart转换没有真正的问题,只是我在调查中的疏忽,我没有发现我自己很久以前的序列化代码是罪魁祸首的事实。

Json_seralizer执行(e作为num)?。toDouble()将目标类中的1正确转换为1.0。

 类似资料:
  • 我到处寻找解决方案,尝试了不同的解决方案,包括Chip Bennett在这里详细解释的解决方案,但我似乎仍然无法让它工作。 结果的第一页工作正常,但是从第2页开始,它只显示索引模板,并且仍然显示页面未找到。这是我的代码: 功能。php 提取查询参数的代码 循环代码: 任何建议将不胜感激。 编辑: 我还注意到,当我尝试访问第2页时,URL被修改了。 这是第1页URL: 第2页URL:

  • 问题内容: 多年来,我尽力避免出现这种情况。在适用时使用多态或访客模式。我想它在某些情况下可以简化维护工作…还有其他应注意的缺点吗? 但是我确实在Java库中到处都看到它,所以我想它有它的位置吗?在什么情况下更可取?是否不可避免? 问题答案: 我可以想象某些情况,例如您有一个库的对象,您无法扩展这些对象(或者这样做很不方便),也许与您的某些对象混合在一起,这些对象都具有相同的基类,并且一起采集。

  • 问题内容: 在Swift中,是否可以将最大INT值设置为UITextField? 我的用例是我有5个文本字段,它们需要具有最大的int值。这些值的范围从500一直到10,000。5个不同的文本字段中的每个字段将具有不同的最大值。我不能使用选择器或下拉列表,因为增量将是1。UISlider太难了,无法“擦入”数字。 如果最大int值为5,000,则用户不能(在数字键盘的键盘类型上)输入大于5000的

  • 问题内容: 在这段代码中,最后,我为c1分配了一个值,但是当我打印它时,我在所有c1字段中都得到了null。我为Cliente类写下了代码。我想打印我给c1的所有值,但我不知道为什么在所有字段中都打印null。我使用调试器遵循代码,直到将所有值分配给新变量的语句为止,一切都正确。 问题答案: 你应该改变这个 至 您正在为方法参数而不是字段分配值。同样适用于构造函数中的所有参数。

  • 我已经使用Spring Security和SAML实现了SSO。以下是目前为我工作的内容: 当我尝试访问SP上的任何资源时,如果我还没有登录,我会被重定向到我的IdP(在我的情况下是idp.ssocircle.com)。在IDP成功验证后,我会被重定向回SP,并授权传入的SAML响应并为相应的用户创建一个会话。到目前为止,一切都很酷!但是当我从IDP注销时(通过从idp.ssocircle.com

  • 不确定之前是否有人遇到过类似的问题。当我创建一个远程配置参数并将其选择为不带条件值的布尔值时。在我的iOS项目中,firebase可以正确读取它。然而,当我开始使用条件语句时,它会检查用户是否在特定位置,例如下图中的英国。 设置此参数时,我执行了以下操作: 每次我访问“test_country”参数时,它都显示默认值false,而不是预期的“true”。我查看了关于堆栈溢出和设置的不同问题 co