扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
首先我们看看最简单的实现方法,需要达到这样的目的。
专注于为中小企业提供成都网站建设、做网站服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业荔城免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了成百上千企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
输入一串数字或者字符串,最后返回格式化后的字符串,每隔3位用逗号分隔,通过四舍五入保留小数点后2两位。
我们来分析下方法的实现过程。
替换掉原本传入数据中可能出现的'$'和',',然后判断是否为数字。
判断传入的数字是正数还是负数。
判断小数位数的舍入性。
每隔三位,添加一个逗号。
重新拼接字符串,正负号+整数位+小数点+小数位
/*
将数值四舍五入后格式化.
@param num 数值(Number或者String)
@param cent 要保留的小数位(Number)
@param isThousand 是否需要千分位 0:不需要,1:需要(数值类型);
@return 格式的字符串,如'1,234,567.45'
@type String
*/
function formatNumber(num,cent,isThousand){
num = num.toString().replace(/\$|\,/g,'');
if(isNaN(num))//检查传入数值为数值类型.
num = "0";
if(isNaN(cent))//确保传入小数位为数值型数值.
cent = 0;
cent = parseInt(cent);
cent = Math.abs(cent);//求出小数位数,确保为正整数.
if(isNaN(isThousand))//确保传入是否需要千分位为数值类型.
isThousand = 0;
isThousand = parseInt(isThousand);
if(isThousand 0)
isThousand = 0;
if(isThousand =1) //确保传入的数值只为0或1
isThousand = 1;
sign = (num == (num = Math.abs(num)));//获取符号(正/负数)
//Math.floor:返回小于等于其数值参数的最大整数
num = Math.floor(num*Math.pow(10,cent)+0.50000000001);//把指定的小数位先转换成整数.多余的小数位四舍五入.
cents = num%Math.pow(10,cent); //求出小数位数值.
num = Math.floor(num/Math.pow(10,cent)).toString();//求出整数位数值.
cents = cents.toString();//把小数位转换成字符串,以便求小数位长度.
while(cents.lengthcent){//补足小数位到指定的位数.
cents = "0" + cents;
}
if(isThousand == 0) //不需要千分位符.
return (((sign)?'':'-') + num + '.' + cents);
//对整数部分进行千分位格式化.
for (var i = 0; i Math.floor((num.length-(1+i))/3); i++)
num = num.substring(0,num.length-(4*i+3))+'’'+
num.substring(num.length-(4*i+3));
return (((sign)?'':'-') + num + '.' + cents);
}
舍入是使用数字时最常见的操作之一。
这里有几个对数字进行舍入的内建函数:
//向下舍入:3.1变成3,-1.1变成-2
//向上舍入:3.1变成4,-1.1变成-1
//向最近的整数舍入:3.1变成3,3.6变成4,中间值3.5变成4
//移除小数点后的所有内容而没有舍入:3.1变成3,-1.1变成-1
这些函数涵盖了处理数字小数部分的所有可能方法。但是,如果我们想将数字舍入到小数点后 n 位改怎么办?
例如,我们有 1.2345 ,并且想把它舍入到小数点后两位,仅得到 1.23 。
有两种方法可以实现这个需求:
1.乘除法
例如,要将数字舍入到小数点后两位,我们可以将数字乘以 100 (或更大的 10 的整数次幂),调用舍入函数,然后再将其除回。
2.函数 toFixed(n) 将数字舍入到小数点后 n 位,并以字符串形式返回结果。
这会向上或向下舍入到最接近的值,类似于Math.round():
请注意 tofixed 的结果是一个字符串。如果小数部分比需要的短,则在结尾添加 0 :
我们可以使用一元加号或 Number() 调用,将其转换为数字: +num.toFixed(5) ;
我测试了你的表达式,结果是3488.4849999999997。四舍五入为3488.48。
javascript做浮点数运算时,由于浮点数精度的问题,会造成运算结果不准确。
解决办法是:将小数运算转化为整数运算,这样就不会丢失精度。
function multiply(arg1, arg2)
{
var m=0, s1=arg1.toString(), s2=arg2.toString();
try{
m+=s1.split(".")[1].length
} catch(e){}
try{
m+=s2.split(".")[1].length
} catch(e){}
return Number(s1.replace(".","")) * Number(s2.replace(".","")) / Math.pow(10,m)
}
multiply(500.50,6.97);
/*
3488.485
*/
既想保证精度,又想简单,那没有这样的方法。其实这个方法本身并不复杂。
求网友推荐~
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流