我有这个脚本,它正在格式化我的货币,但现在它没有修复我的值到0小数点,我是新的JavaScript,所以任何人都可以解释在哪里和我做这个?感谢
function FormatNumberBy3(num, decpoint, sep) {
// check for missing parameters and use defaults if so
if (arguments.length == 2) {
sep = ",";
}
if (arguments.length == 1) {
sep = ",";
decpoint = ".";
}
// need a string for operations
num = num.toString();
// separate the whole number and the fraction if possible
a = num.split(decpoint);
x = a[0]; // decimal
y = a[1]; // fraction
z = "";
if (typeof(x) != "undefined") {
// reverse the digits. regexp works from left to right.
for (i=x.length-1;i>=0;i--)
z += x.charAt(i);
// add seperators. but undo the trailing one, if there
z = z.replace(/(\d{3})/g, "$1" + sep);
if (z.slice(-sep.length) == sep)
z = z.slice(0, -sep.length);
x = "";
// reverse again to get back the number
for (i=z.length-1;i>=0;i--)
x += z.charAt(i);
// add the fraction back in, if it was there
if (typeof(y) != "undefined" && y.length > 0)
x += decpoint + y;
}
return x;
}
答案 0 :(得分:0)
我可能误解了你的问题,但听起来你想要Math.floor()
答案 1 :(得分:0)
你可以用数学方式对数字进行舍入,这可以更快,更快,更多,更简单。仅在这个网站上就有数百个这种算法的例子。
function round(number, places)
{
var multiplicator = Math.pow(10, places);
return Math.round(number * multiplicator) / multiplicator;
}
alert(round(123.456, 0)); // alerts "123"
此功能可以舍入到任意小数位。如果要舍入到最接近的整数,可以使用Math.round(x)
。
Math.round
将十进制数舍入为最接近的整数。假设您要保留 3 小数位,您所要做的就是将十进制数乘以1000(即10次幂 3 ),舍入到最接近的整数,然后除以1000.这就是这个片段的作用。
答案 2 :(得分:0)
你的功能似乎对我有用...我认为传递"1000"
作为参数的结果应该是"1,000"
?我不确定我是通过“将[你的]值固定到0位小数”来理解你的意思。
这是我编写的一个函数,用于格式化数字(就像上面的函数一样):
function num_format(str) {
if (typeof str !== 'string' || /[^\d,\.e+-]/.test(str)) {
if (typeof str === 'number') {
str = str.toString();
} else {
throw new TypeError("Argument is not a string with a number in it");
}
}
var reg = /(\d+)(\d{3})/;
str = str.split(".");
while (reg.test(str[0])) {
str[0] = str[0].replace(reg, "$1,$2");
}
return str.join(".");
}
删除错误检查代码,它变成了一个很短的小功能(五行)。传递任何数字,它会正确格式化,虽然我不允许指定分隔符。
至于将数字舍入到任意小数位,我建议在上面看zneak's answer。然后就是这样做:
num_format(round("100000.12341234", 2));
哪会产生"100,000.12"
的结果。
答案 3 :(得分:0)
此功能应能适用于所有各种场景:
function formatNumber(num, precision, sep, thousand, addTrailing0) {
if (isNaN(num))
return "";
if (isNaN(precision))
precision = 2;
if (typeof addTrailing0 == "undefined")
addTrailing0 = true;
var factor = Math.pow(10, precision);
num = String(Math.round(num * factor) / factor);
if (addTrailing0 && precision > 0) {
if (num.indexOf(".") < 0)
num += ".";
for (var length = num.substr(num.indexOf(".")+1).length; length < precision; ++length)
num += "0";
}
var parts = num.split(".");
parts[0] = parts[0].split("").reverse().join("").replace(/(\d{3})(?=\d)/g, "$1" + (thousand || ",")).split("").reverse().join("");
num = parts[0] + (parts.length > 1 ? (sep || ".") + parts[1] : "");
//debug:
document.write(num + "<br />");
return num;
}
示例:
formatNumber(32432342342.3574, 0); // 32,432,342,342
formatNumber(32432342342.3574, 2); // 32,432,342,342.36
formatNumber(1342.525423, 4, ".", ","); // 1,342.5254
formatNumber(1342.525423, 2, ",", "."); // 1.342,53
formatNumber(1342.525423); // 1,342.53
formatNumber(1342.525423, 0); // 1,343
formatNumber(342.525423, 8); // 342.52542300
formatNumber(42.525423, 8, null, null, false); // 42.525423
formatNumber(2.5, 3, ",", "."); // 2,500
进行现场演示