包含javascript舍的词条
如何使用Javascript格式化数字,金额,舍入舍去
首先我们看看最简单的实现方法,需要达到这样的目的。
输入一串数字或者字符串,最后返回格式化后的字符串,每隔3位用逗号分隔,通过四舍五入保留小数点后2两位。
我们来分析下方法的实现过程。
替换掉原本传入数据中可能出现的'$'和',',然后判断是否为数字。
判断传入的数字是正数还是负数。
判断小数位数的舍入性。
每隔三位,添加一个逗号。
重新拼接字符串,正负号+整数位+小数点+小数位
javascript对数字格式化、千位符、保留小数、四舍五入
/*
将数值四舍五入后格式化.
@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);
}
JS实现浮点数精确舍入小数点
舍入是使用数字时最常见的操作之一。
这里有几个对数字进行舍入的内建函数:
//向下舍入: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) ;
js javascript 四舍五入结果不正确 不对
我测试了你的表达式,结果是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
*/
既想保证精度,又想简单,那没有这样的方法。其实这个方法本身并不复杂。
求网友推荐~
您可能感兴趣的文章
- 04-02javascript潜力,javascript强大吗
- 04-02javascript点线,点线的代码
- 04-02javascript移出,js 移入移出
- 04-02javascript替换字符串,js字符串的替换
- 04-02javascript匿名,js匿名方法
- 04-02javascript并行,深入理解并行编程 豆瓣
- 04-02javascript警报,JavaScript警告
- 04-02javascript前身,javascript的前身
- 04-02javascript遮盖,JavaScript遮盖PC端页面
- 01-10JavaScript实现简单计算器功能
阅读排行
本栏相关
- 04-02javascript点线,点线的代码
- 04-02javascript潜力,javascript强大吗
- 04-02javascript替换字符串,js字符串的替换
- 04-02javascript移出,js 移入移出
- 04-02包含javascript舍的词条
- 04-02javascript并行,深入理解并行编程 豆瓣
- 04-02javascript匿名,js匿名方法
- 04-02javascript警报,JavaScript警告
- 04-02javascript遮盖,JavaScript遮盖PC端页面
- 04-02javascript前身,javascript的前身
随机阅读
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10C#中split用法实例总结
- 04-02jquery与jsp,用jquery
- 01-10delphi制作wav文件的方法
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10SublimeText编译C开发环境设置
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-11ajax实现页面的局部加载
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文