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
相关产品推荐
相关产品推荐

