【问题标题】:When the amount is not in USD currency don't have the $ symbol in the front当金额不是美元货币时,前面没有 $ 符号
【发布时间】:2020-02-04 21:37:36
【问题描述】:

如何在以下函数中添加条件 --> 当货币不是美元时,不要在金额前面添加 $ 符号。

var convertToCurrency = number => {
    if (!number) return '';
    return new Intl.NumberFormat('en', {
      style: 'currency',
      currency: 'USD'
    }).format(number);
  };

var amount = {
    amount: 10,
    currency: "JPY"
  };

convertToCurrency(amount["amount"]);

==> $10.00 JPY

【问题讨论】:

  • 如果币种不是USD,要如何检测?
  • 确实这个问题听起来有点奇怪。您能否详细说明用例/上下文?
  • 也许您的意思是在 之后为美元以外的货币添加符号?
  • 我考虑的货币是USDcUSD ---> 两者都采用符号$。但除此之外的任何东西都不应该在前面有$ 标志。比如说**100 JPY**不应该有**$ 100 JPY**而是有100 JPY
  • "amount": { "amount": 10, "currency": "USD" } 数据是这样进来的。这只是一个例子。货币可以是 --> "currency" : "JPY" 也可以

标签: javascript reactjs currency


【解决方案1】:

如果我正确理解您想要什么,您可以在您的函数 isUSD 或类似的东西中添加一个标志,然后执行以下操作。

const convertToCurrency = (number, isUSD) => {
  if (!number) return '';
  if (isUSD) {
    return new Intl.NumberFormat('en', {
      style: 'currency',
      currency: 'USD'
    }).format(number);
  } else {
    return (Math.round(number * 100) / 100).toFixed(2).replace(/\B(?=(\d{3})+(?!\d))/g, ",");;
  }
};

console.log(convertToCurrency(10000, true));
console.log(convertToCurrency(10000, false));

【讨论】:

  • if (isNaN(parseFloat(number)) && isFinite(number)) return ''; ===> 这将是检查传入的数字是数字还是字符串的正确方法。如果不是,则返回一个空字符串。
  • @Jeena 是的,你所拥有的应该覆盖你 - stackoverflow.com/questions/175739/…
  • 我尝试在 Vscode 的代码中使用它,但它对我大喊大叫 Unexpected use of 'isNaN'.. ** and also on ** Unexpected use of 'isFinite.
  • let convertToCurrency = (amt, cur) => { if (!isNaN(parseFloat(amt)) & isFinite(amt)) return ''; let isUSD = cur === 'USD' || cur === 'cUSD'; if (isUSD) { return new Intl.NumberFormat('en', { style: 'currency', currency: 'USD' }).format(amt); } return (Math.round(amt * 100) / 100) .toFixed(2) .replace(/\B(?=(\d{3})+(?!\d))/g, ','); }; 这是代码。
  • 必须是&&
【解决方案2】:

如果是美元,您可以传递一个可选的布尔值并返回完整的字符串或跳过第一个字符(即 $ 符号)。

 var convertToCurrency = (number, isUsd) => {
    if (!number) return '';
    var sliceFrom = isUsd ? 1 : 0;
    return new Intl.NumberFormat('en', {
      style: 'currency',
      currency: 'USD',
    }).format(number).slice(sliceFrom);
  };

  convertToCurrency(10000, true);

如果您打算使用其他格式进行货币转换,您也可以传入format 字符串并进行检查。

所以不要使用isUsd,而是使用currency

 var convertToCurrency = (number, currency) => {
        if (!number || !currency) return '';
        var sliceFrom = currency === 'USD' ? 1 : 0;
        return new Intl.NumberFormat('en', {
          style: 'currency',
          currency,
        }).format(number).slice(sliceFrom);
      };

 convertToCurrency(10000,'USD');

【讨论】:

  • ``` var convertToCurrency = (number, currency) => { if (!number || !currency) return ''; var sliceFrom = 货币 === 'USD' ? 1:0; return new Intl.NumberFormat('en', { style: 'currency', currency, }).format(number).slice(sliceFrom); }; convertToCurrency(10000,'JPY'); ``` 我得到了结果 ==> ¥10,000。相反,我希望它显示 10,000 日元
  • @Jeena 那是正确的,我认为条件是不显示符号只为usd。否则我们可以默认将1 传递给切片
【解决方案3】:
var convertToCurrency = (number, currency) => {
    if (!number || !currency) return '';

    var isUSD = (currency.toUpperCase() === 'USD');

    if (isUSD) {
        return new Intl.NumberFormat('en', {
            style: 'currency',
            currency: 'USD',
        }).format(number);
    } else {
        return new Intl.NumberFormat('en', {
            style: 'decimal',
        }).format(number) + ' ' + currency;
    }
};

convertToCurrency(10000, 'USD'); // "$10,000.00"
convertToCurrency(10000, 'JPY'); // "10,000.00 JPY"

一些备注:

  • 您当前的代码(修改currency 参数)不会产生“$ 100 JPY”,而是“¥100”。不太一样……
  • 也许您对输出进行了太多调整,而应该只使用标准输出。 (最值得注意的是,将所有货币放在左边或右边,但避免混合使用)
  • 您可能对parameter currencyDisplay: 'symbol' / 'code' 感兴趣。前者尽可能输出“$”或“¥”等符号,后者输出“USD”或“JPY”等 ISO 代码。

【讨论】:

  • if (isNaN(parseFloat(number)) && isFinite(number)) return ''; ===> 这将是检查传入的数字是数字还是字符串的正确方法。如果它不是一个有效的数字,则返回一个空字符串。
【解决方案4】:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/NumberFormat

var style = "currency";
var currency = 'USD'; //replace with your dynamic value

var convertToCurrency = (number, style, currency) => {
    if (!number) return '';
    return new Intl.NumberFormat('en', {
        style: style,
        currency: currency
    }).format(number);
};

console.log(convertToCurrency(10000, style, currency));

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 2018-03-29
    • 2016-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    相关资源
    最近更新 更多