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

Vitest中Number.toLocaleString(pt-BR)转换失败问题

本地化货币转换函数的pt-BR测试失败问题

我写了一个toCurrency函数,用来把字符串或数字转换成符合本地化格式的货币字符串,代码如下:

function toCurrency(
    value: string | number,
    locale: string = "pt-BR",
    currency: string = "BRL",
    options?: Intl.NumberFormatOptions
) {
    return Number(value).toLocaleString(locale, {
        maximumFractionDigits: 2,
        style: "currency",
        currency: currency,
        ...options,
    });
}

同时配套写了Vitest测试用例:

describe("toCurrency", () => {
    test("toCurrency defined", async () => {
        expect(toCurrency).toBeDefined();
    });

    test("toCurrency", () => {
        const result = toCurrency(1, "pt-BR", "BRL");
        expect(result).toEqual("R$ 1,00");
    });
    
    test("toCurrency USD", () => {
        const result = toCurrency(1, "en-US", "USD");
        expect(result).toEqual("$1.00");
    });
});

但只有pt-BR(巴西葡萄牙语)环境下的测试会失败,失败截图如下:
测试失败截图

可能的原因及解决办法

  1. Node.js环境Intl本地化数据不全
    部分Node.js版本默认的Intl实现没有包含完整的pt-BR本地化数据,导致格式输出不符合预期。可以尝试升级Node.js到16.x及以上版本,新版本对Intl的支持更完善。

  2. 缺少最小小数位数配置
    当前函数只设置了maximumFractionDigits: 2,但pt-BR本地化环境默认的最小小数位数可能不是2,导致输出格式异常。修改函数,添加minimumFractionDigits: 2:

function toCurrency(
    value: string | number,
    locale: string = "pt-BR",
    currency: string = "BRL",
    options?: Intl.NumberFormatOptions
) {
    return Number(value).toLocaleString(locale, {
        minimumFractionDigits: 2,
        maximumFractionDigits: 2,
        style: "currency",
        currency: currency,
        ...options,
    });
}
  1. 测试预期的格式细节差异
    不同环境下的Intl输出可能有细微差别,比如货币符号和数字之间的空格。可以先打印实际输出结果,再调整测试断言。例如如果实际输出是R$1,00(无空格),就把测试断言改成:
expect(result).toEqual("R$1,00");
  1. 补充本地化数据
    如果升级Node.js后问题仍存在,可以安装@formatjs/intl-numberformat及其对应的pt-BR locale包来补充数据:
npm install @formatjs/intl-numberformat @formatjs/intl-numberformat/locale-data/pt

然后在代码中引入:

import '@formatjs/intl-numberformat/polyfill';
import '@formatjs/intl-numberformat/locale-data/pt';

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 06:03:27