使用double.parse解析字符串时末尾小数0被截断的技术咨询
解决double.parse截断末尾小数0的问题
首先要明确:double类型本身不会保留末尾无意义的0。因为32.5和32.50在数值上完全相等,浮点数(double)存储的是数值的近似值,不会记录小数末尾的0这类格式信息,所以double.parse("32.50")得到的结果就是32.5,这是正常的行为。
根据你的需求,有两种解决方案:
1. 仅在显示时保留两位小数
如果只是需要输出或展示时显示两位小数,不需要修改存储的数值类型,直接用toStringAsFixed(2)格式化输出即可:
var val = double.parse("32.50"); print(val.toStringAsFixed(2)); // 输出 32.50
toStringAsFixed(2)会返回一个字符串,强制保留两位小数,自动在末尾补0。
2. 存储时保留小数位数信息
如果需要在存储阶段就保留小数位数(比如金额、精确计量场景),double类型不适合,建议使用Decimal类型来精确处理:
首先在pubspec.yaml中添加依赖:
dependencies: decimal: ^2.3.3
然后在代码中使用:
import 'package:decimal/decimal.dart'; void main() { var val = Decimal.parse("32.50"); print(val); // 输出 32.50 }
Decimal类型会精确保留输入字符串中的小数位数,适合需要严格记录小数格式的场景。
另外注意你的示例代码里有个小错误:print(val1)应该改为print(val),变量名要保持一致。
内容的提问来源于stack exchange,提问作者Joel
相关产品推荐
相关产品推荐

