Intl.NumberFormat(ar/fa区域)格式化结果不符,求正确期望字符串
波斯语区域Intl.NumberFormat精确返回值与测试修正
你代码中使用的是fa(波斯语)区域而非阿拉伯语(ar),针对你的格式化需求,以下是正确的处理方案:
代码与返回值解析
你的格式化代码:
const value = new Intl.NumberFormat('fa', { minimumIntegerDigits: 4, minimumFractionDigits: 2, style:'percent' }).format(1.2);
- 数值转换:1.2转为百分比是120%,结合参数要求,数值部分被格式化为4位整数+2位小数的波斯数字:
٠٬١٢٠٫٠٠ - 后缀处理:波斯语区域的百分比符号
٪后会附带阿拉伯文零宽非连接符(U+061C),也就是你看到的,这是RTL(从右到左)文本系统中用于排版方向控制的标准字符,而非左至右标记(U+200E)。
正确的测试期望值
将断言修改为:
expect(value).toEqual('٠٬١٢٠٫٠٠٪');
补充说明
不同JS运行环境(如浏览器、Node.js)的Intl实现可能存在细微差异,但符合ECMA-402标准的波斯语区域格式化结果都会包含这个零宽非连接符,用于确保RTL文本与百分比符号的正确排版顺序。
内容的提问来源于stack exchange,提问作者Matthieu Riegler
相关产品推荐
相关产品推荐

