如何使用FormatJs消息语法将数字格式化为带有两位小数的百分比?

Ram*_*zar 1 javascript reactjs formatjs react-intl

使用react-intl我有以下消息:

serviceFee: {
  en: 'Service fee: ({fee, number, percent})',
  ...
},
Run Code Online (Sandbox Code Playgroud)

当我打电话

<FormatMessage id="serviceFee" values={{ fee: 0.0625 }} />
Run Code Online (Sandbox Code Playgroud)

我希望它呈现:

服务费:6.25%

但是我得到了一个四舍五入的值:

服务费:6%

如何解决这个问题?

gfp*_*eco 6

有两种方法可以做到这一点:

  1. 您可以从消息语法中删除百分比样式:

    serviceFee: 'Service fee: ({fee})'
    
    Run Code Online (Sandbox Code Playgroud)

    然后以正确的格式发送值:

    <FormatMessage
      id="serviceFee"
      values={{ fee: intl.formatNumber(0.0625, { style: 'percent', maximumFractionDigits: 2 }) }}
    />
    
    Run Code Online (Sandbox Code Playgroud)

要么

  1. 创建一个设置必要选项的自定义格式:

    const formats = {
      number: {
        percentWith2Decimals: { style: 'percent', maximumFractionDigits: 2 },
      },
    }
    
    Run Code Online (Sandbox Code Playgroud)

    添加将格式添加到您的IntlProvider

    <IntlProvider formats={formats}>...</IntlProvider>
    
    Run Code Online (Sandbox Code Playgroud)

    然后在您的消息中使用自定义格式:

    serviceFee: 'Service fee: ({fee, number, percentWith2Decimals})'
    
    Run Code Online (Sandbox Code Playgroud)