js中toFixed函数四舍五入结果不正确
web JavaScript 2017-09-14 3325 0
关于本站

“最难不过坚持”

本人承接扒站仿站,php网站维护,病毒查杀,网站编辑,网站改版,html制作

有需要网站维护,改版,病毒查杀,网站编辑,网站备案,html制作等相关的工作可以联系我。
本人有多年相关工作经验,也可提供免费咨询,交个朋友。
有需要探讨问题的朋友,也可以加我微信,共同探讨!
微信:15011482830 QQ:408917339

6477160 2614 39
最新评论
https://jueru.net/
评 留言
:weixiao:
评 留言
:shuijiao: :weiqu: :zhenbang: :leng:
评 留言
:yiwen: :yiwen: :yiwen: :yiwen:
评 EasySass: could not generate CSS file. See Output panel for details.
这个业务逻辑多少都有点奇怪了,阅读浏览次数增值在新闻详情页的控制器方法里setInc,这怎么还写进模型事件里了。如果非要用onAfterRead也可以,把新闻文章的内容单独分出来一个news_content表,然后把它和news做关联,然后给news_content表的onAfterRead事件做增值处理,这样点进新闻页内查询到文章内容时才会触发它。
评 TP6模型事件-查询后onAfterRead不好用
文章标签更多
ThinkPHP (254)
Mysql (58)
DedeCms (33)
jQuery (67)
证件照 (1)
setInc (4)
setDec (4)
onclick (5)
打开边栏(ESC) 关闭边栏(ESC)

本文内容来自网络,搜索的时候碰到,所以整理记录下。

500.50*6.97结果为3488.485
四舍五入保留两位应该是3488.49
结果却是3488.48
我用Math.round()
和toFixed(2)
都一样结果,
有没有简单处理办法?

解答一:

我测试了你的表达式,结果是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
*/
既想保证精度,又想简单,那没有这样的方法。其实这个方法本身并不复杂。

解答二:

请注意,在js中由于小数精度原因,500.50*6.97 = 3488.4849999999996,因此你toFixed(2)为3488.48,通常可以这样处理:

var n = (500.50*100)*(6.97*100);
var num = new Number(n/10000).toFixed(2);  //结果:3488.49

版权声明:本篇文章来源于网络。 来源链接

相关推荐
return和return false的区别
JavaScript | 2020-08-26 18863
1. return返回null,起到中断方法执行的效果,只要不return false事件处理函数将会继续执行,表单将提交 2. return false,事件处理函数会取消事件,不再继续向下执行。比如表单将终止提交。 <script> function validateForm(){ var username...
console.log怎样输出换行
JavaScript | 2020-04-17 13678
两个console.log()之间默认是换行的,不用单独处理,如果想输出换行,可以用 console.log( '\n' ); 其他内容 如果同时打印数字和字符串,并且数字在前,打印字符串会添加引号显示。 console.log('test',1) ==》test 1 console.log(1,'test') ...
评论:0条
评论加载中...
发表评论