Flutter中计算日期差求商时取整除法导致结果为0的问题解决
日期除法计算结果恒为0的原因与解决方法
问题现象
当前已实现的日期差计算逻辑经打印验证完全正确:
date1calc为date1与date2的天数差,实测值为140date2calc为date3与date4的天数差,实测值为270
预期通过两个值的除法得到约0.5185的浮点结果,但实际运行时dateValue始终输出0。
出问题的原始代码如下:
var date1calc = singleDate.difference(dateNow).inDays; var date2calc = singleDate.difference(startSingleDate).inDays; var dateValue = date1calc ~/ date2calc;
对应控制台打印结果:
date1calc = 140 date2calc = 270 dateValue = 0
根因说明
代码中使用的~/是Dart内置的整数除法运算符,运算规则为计算两数相除的结果后,直接舍去所有小数部分,仅保留整数部分:
140除以270的整数部分为0,因此最终计算结果必然为0,并非数值计算流程出错。
修正方式
如果需要得到带小数的浮点型结果,将整数除法运算符~/替换为普通除法运算符/即可,运算结果为double类型,可正常输出约0.5185的期望值。
后续衍生问题与适配方案
替换为普通除法后,控制台可正常输出精度正确的浮点结果,但会触发类型不匹配报错:'double' is not a subtype of type 'int'
针对该问题,可通过显式类型转换适配业务代码的int类型要求,参考实现如下:
double x = dateValue; int a = x.toInt(); var dateValue2 = a;
后续业务逻辑中使用转换后的dateValue2即可正常运行,该方案可满足当前需求,不代表是全场景下的最优实现。
内容的提问来源于stack exchange,提问作者cc976a
相关产品推荐
相关产品推荐

