Dart中如何实现将100.0/100.00转100、同时保留100.23等非整数值的格式转换
Dart 按需数字格式转换实现
问题根因
直接调用floor()、round()方法的逻辑,是对传入的所有数字无差别做整数逼近操作,无论原始值是否存在非零有效小数位,都会返回最接近的整数结果,自然会把100.23这类带有效小数的数值错误截断为100。
正确实现逻辑
转换的核心是先做条件判断,再决定处理方式,不对原始值无差别做取整操作:
- 计算传入数值和它的截断整数部分的差值
- 若差值为0:对应100.0、100.00这类零小数位的浮点值,转换为整数形式返回
- 若差值不为0:对应100.23这类带非零有效小数的数值,直接保留原始值返回
通用实现代码
dynamic adaptiveFormatNumber(num input) { double decimalGap = input - input.truncate(); if (decimalGap == 0) { return input.toInt(); } return input; }
实际效果匹配
调用上述方法的输出完全符合规则要求:
- 输入
100.00:返回整数类型的100 - 输入
100.0:返回整数类型的100 - 输入
100.23:返回浮点类型的100.23,不会被强制取整
注意:如果涉及高精度计算场景(如金额计算),直接用差值判断可能受浮点存储精度影响出现判断偏差,这种场景可以将数值转为字符串,拆分小数点后的内容校验是否存在非零有效位,避免精度误差导致的判断错误。
内容的提问来源于stack exchange,提问作者blue492
相关产品推荐
相关产品推荐

