PHP使用NumberFormatter法语拼写小数时如何让小数部分按整数连读
解决方法
PHP内置的NumberFormatter类默认处理小数拼写时会将小数位逐位转换,因此会出现17拆分为un sept的情况。你可以手动拆分数值的整数部分与小数部分,分别做拼写转换后再拼接,即可实现需求:
// 初始化法语拼写格式化器 $dec_words = new NumberFormatter("fr", NumberFormatter::SPELLOUT); // 待转换的小数 $num = 20.17; // 拆分整数与小数部分,转字符串处理避免浮点数精度误差 $num_str = (string)$num; $parts = explode('.', $num_str); // 分别格式化两部分 $int_part = $dec_words->format($parts[0]); $decimal_part = $dec_words->format($parts[1] ?? 0); // 拼接结果 $result = $int_part . ' virgule ' . $decimal_part; echo $result;
运行上述代码即可输出你期望的结果:vingt virgule dix-sept。
补充注意点
- 如果你的场景需要处理固定小数位(比如金额类场景保留2位小数),可以先用
number_format对数值做精度统一后再拆分,避免浮点数精度导致的小数部分异常 - 如果存在小数部分为0的场景,可以根据需求判断是否省略小数部分的输出
内容的提问来源于stack exchange,提问作者Joseph Jnr
相关产品推荐
相关产品推荐

