NumberFormat 不会遵守 .toFixed

NumberFormat won't respect .toFixed

我需要这种格式:

555.555.55,55
555.555.55,50 /* Note te extra zero */

我正在尝试这样

new Intl.NumberFormat("es-ES").format(current.toFixed(2));

但这会打印出来

555.555.55,5

有什么想法吗?

问题是你如何使用 format:

new Intl.NumberFormat("es-ES").format(current.toFixed(2));
                                      ^^^^^^^^^^^^^^^^^^

current.toFixed(2) 的调用将 return 一个 string 已经有 2 位小数的实例。

使用字符串实例调用 NumberFormat.prototype.format 将导致它将字符串转换回数字,然后根据 es-ES 文化规则对其进行格式化,从而丢失有关固定的信息-小数位格式。

相反,使用指定 minimumFractionDigits:

options 对象实例化 NumberFormat
new Intl.NumberFormat("es-ES", { minimumFractionDigits: 2 } ).format( current );

如果要重复使用 Intl.NumberFormat 对象,请记住缓存它,这样就不会每次都重新创建它:

const esFormat = new Intl.NumberFormat("es-ES", { minimumFractionDigits: 2 } ).format( current );

async function doSomething() {

    const someNumericValue = await getNumber();
    if( typeof someNumericValue !== 'number' || isNaN( someNumericValue ) ) throw new Error( someNumericValue + " is not a number." )

    return esFormat.format( someNumericValue );
}