You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 06:29:56