【问题标题】:Format currency using javascript使用javascript格式化货币
【发布时间】:2011-01-14 01:16:50
【问题描述】:

脚本返回一个数字,例如 0.0580,因此采用 x.xxxx 格式,或者返回一个 (x),表示剩余 X 个单位。

我想格式化数字 0.0580 并返回 5.8 cent 或返回 x 个左单位

任何想法如何在 javascript 中做到这一点?特别是如何格式化 x.xxxx?

如果第一个 x 不是 0,我想返回例如1.75 美元。

【问题讨论】:

  • 也许尝试自己写这篇文章,然后在遇到问题时提出具体问题?

标签: javascript currency


【解决方案1】:

MS 为 jquery 编写了一个不错的插件。如果您正在本地化,它特别有用。试一试:

http://weblogs.asp.net/scottgu/archive/2010/06/10/jquery-globalization-plugin-from-microsoft.aspx

我不确定这是否可以在 jquery 之外使用...

【讨论】:

    【解决方案2】:

    我在这里可能会宠坏你,但无论如何。这是我在某个地方发现的一个函数,从那以后一直在回收。我实际上并没有费心去研究它来弄清楚它到底做了什么,但它非常有用:

    function FormatMoneyAmount(starting_string, ending_string) {
      //check validity of input (true = invalid, false = valid)
      var valid_exp = new RegExp ('[^0-9,.$]', 'gi');
      input_invalid = (typeof(ending_string) == 'undefined' && valid_exp.test(starting_string));
    
      //check if more than 2 digits follow decimal or no decimal
      decimal_invalid = typeof(ending_string) == 'undefined' && (starting_string.indexOf('.') > -1) && ((starting_string.length - starting_string.indexOf('.')) > 3);
    
      if (input_invalid || decimal_invalid) {
        ending_string = starting_string;
      } else {
        //remove commas, dollar signs
        var replace_exp = new RegExp ('[,$]', 'gi');
        starting_string = starting_string.replace(replace_exp, '');
    
        //remove decimal if ending string not set, save for adding on later
        var decimal_substring = '';
        if (typeof(ending_string) == 'undefined' && starting_string.indexOf('.') > -1) {
          decimal_substring = starting_string.substring(starting_string.indexOf('.'), starting_string.length);
          remaining_string = starting_string.substring(0,starting_string.indexOf('.'));
        } else {
          remaining_string = starting_string;
        }
    
        //if string is already 3 characters or less, do nothing
        if (remaining_string.length > 3) {
          //separate last 3 characters of string from rest of string
          var final_three = remaining_string.substring(remaining_string.length - 3, remaining_string.length);
          remaining_string = remaining_string.substring(0, remaining_string.length - 3);
    
          //if not first group of 3, add new group before old group with comma, else set to new group
          ending_string = (typeof(ending_string) == 'undefined') ? final_three + ((typeof(decimal_substring) == 'undefined') ? '' : decimal_substring) : final_three + ',' + ending_string;
    
          //call function again if more than 3 digits remaining to process, else add to end string
          if (remaining_string.length > 3) {
            ending_string = FormatMoneyAmount(remaining_string, ending_string);
          } else {
            ending_string = remaining_string + ',' + ending_string;
          }
        } else {
          ending_string = (typeof(ending_string) == 'undefined') ? remaining_string : remaining_string + ',' + ending_string + ((typeof(decimal_substring) == 'undefined') ? '' : decimal_substring);
        }
      }
      return ending_string;
    }
    

    【讨论】:

      【解决方案3】:

      首先要做的是检查字符串的格式,因为根据结果,您将有两个代码路径:

      if (typeof num = "string" && num.slice(0,1) == "(" && num.slice(-1) == ")") {
          // String is in the format (x), so we just need to return that number
          return num.slice(1,-1) + " units left";
      }
      

      下一部分是检查数字是否小于1,表明它是美分而不是整美元。如果它小于 1,将它乘以 100 将得到你所追求的美分数:

      if (+num < 1)
          // 0.0580 * 100 = 5.8
          return (num * 100) + " cents";
      else
          return +num + "$";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-18
        • 2011-09-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-04-25
        相关资源
        最近更新 更多