使用 javascript 格式化货币
2011-01-13
7235
脚本要么返回一个数字,如 0.0580,即 x.xxxx 格式,要么返回 (x),表示剩余 X 个单位。
我想格式化数字 0.0580 并返回 5.8 美分 或返回 剩余 x 个单位 。
有什么想法可以在 javascript 中做到这一点?特别是如何格式化 x.xxxx?
如果第一个 x 不是 0,我想返回例如 1.75 美元。
3个回答
MS 为 jquery 编写了一个不错的插件。如果您要进行本地化,它尤其有用。试试看:
http://weblogs.asp.net/scottgu/archive/2010/06/10/jquery-globalization-plugin-from-microsoft.aspx
我不确定这是否可以在 jquery 之外使用...
ScottE
2011-01-13
我可能在这里剧透了,但没关系。这是我在某个时候发现的一个函数,从那时起我就一直在重复使用。我实际上并没有花心思去研究它到底是干什么的,但它相当有用:
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;
}
Hoatzin
2011-01-13
首先要检查字符串的格式,因为根据结果,您将有两个代码路径:
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 + "$";
Andy E
2011-01-13