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

Flutter/Dart中NumberFormat解析法国格式数字异常原因及优化方案

Flutter/Dart 解析多地区数字格式的问题解决

问题原因

你之前的代码出错,是因为用错了NumberFormat的构造方式。NumberFormat的默认构造函数第一个参数是格式模式字符串(比如#.##),第二个参数才是地区标识(locale)。你把'fr_FR'直接传给第一个参数,相当于让解析器把这个字符串当成格式规则,这时候它会把逗号识别成千位分隔符,自然就把1,2解析成了12.0。

正确实现方案

方案1:用decimalPattern指定地区

这是最直接的方式,专门用于解析对应地区的十进制数字:

import 'package:intl/intl.dart';

void main() {
  String amountAsString = '1,2';
  // 指定法语地区的小数格式解析器
  final formatter = NumberFormat.decimalPattern('fr_FR');
  final result = formatter.parse(amountAsString) as double;
  print(result); // 输出 1.2
}

方案2:通过构造函数的locale参数指定地区

如果需要更灵活的配置,也可以直接在构造函数里通过locale参数传入地区标识:

final formatter = NumberFormat(locale: 'fr_FR');

方案3:添加异常处理(推荐)

实际场景中可能遇到格式不合法的输入,加上异常处理能避免崩溃:

try {
  final result = formatter.parse(amountAsString) as double;
  print(result);
} on FormatException catch (e) {
  print('数字格式错误:$e');
}

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:33:20