关于JavaScript中的toFixed精度问题

SomethingJack 2014-05-19 06:12:06
在做财务系统的时候碰到了这个问题.
由于页面中的一些数据可能动态改变,然后我需要根据设置的精度位数来实现金额的四舍五入精度化
测试过以后 发现toFixed 有问题 好像不是在四舍五入.
还要考虑浏览器兼容性 不知道大家是怎么解决的?
也不知道当初JavaScript为什么这么设计?
...全文
515 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
dan__jian 2015-04-24
  • 打赏
  • 举报
回复
引用 10 楼 u010203057 的回复:
Math.toFixed(保留小数位数)。 用保留小数位数后的一个小数来确定是四舍还是五入。 本人单独测试toFixed时四舍五入是没有问题的。不信楼主也自己试一下。
不是每个都有问题的,你可以试试0.955
天际的海浪 2014-05-20
  • 打赏
  • 举报
回复
解决办法: var num = 8.985; alert((num+((0.5).toFixed(0)==1?0.005:0)).toFixed(2));
u010203057 2014-05-20
  • 打赏
  • 举报
回复
Math.toFixed(保留小数位数)。 用保留小数位数后的一个小数来确定是四舍还是五入。 本人单独测试toFixed时四舍五入是没有问题的。不信楼主也自己试一下。
ddwren 2014-05-20
  • 打赏
  • 举报
回复
引用 楼主 SomethingJack 的回复:
在做财务系统的时候碰到了这个问题. 由于页面中的一些数据可能动态改变,然后我需要根据设置的精度位数来实现金额的四舍五入精度化 测试过以后 发现toFixed 有问题 好像不是在四舍五入. 还要考虑浏览器兼容性 不知道大家是怎么解决的? 也不知道当初JavaScript为什么这么设计?
<html>
	<head>
		<title>四舍五入</title>
	</head>
	<body>
		<input type='text' id='input_val' style="width:100px; height:20px;"/>
		<button id='input_handle'>Click</button>
        <div id='value'></div>
	</body>
	<script type="text/javascript">
        function $(id){
        	return document.getElementById(id);
        }

        $('input_handle').onclick = function inputHandle(){
        	// 作为可设定的值  在此处获取替换掉2
			var len =2;
			
        	var val = $('input_val').value;
        	var tempval = val.substring(0,val.indexOf('.') + len + 2);
			var value = Math.pow(10,len)
			alert(Math.round(tempval * value)/value);
        }
	</script>
</html>
SomethingJack 2014-05-20
  • 打赏
  • 举报
回复
引用 6 楼 jslang 的回复:
不对,不对 toFixed 的问题还不少,单用toFixed还不好解决,郁闷了
是唉 这个问题比较郁闷
SomethingJack 2014-05-20
  • 打赏
  • 举报
回复
引用 3 楼 KK3K2005 的回复:
我不是写了 你的数字乘100 再取整 然后除100 Math.round(num*100)/100;
不是 你没有明白我的意思 你这个只是计算了金额值 如果我要保留的小叔位数是动态设置呢?
天际的海浪 2014-05-20
  • 打赏
  • 举报
回复
不对,不对 toFixed 的问题还不少,单用toFixed还不好解决,郁闷了
天际的海浪 2014-05-19
  • 打赏
  • 举报
回复
toFixed在各浏览器下表现不一 (8.985).toFixed(2) 各浏览器弹出结果: ie7 : 8.99 ie8 : 8.99 ie9+ : 8.98 FF : 8.98 chrome : 8.98 产生这果种结的原因:浏览器js库也存在差异,所以表现也不同。 解决办法: var num = 8.985; alert((num+0.005).toFixed(2));
KK3K2005 2014-05-19
  • 打赏
  • 举报
回复
我不是写了 你的数字乘100 再取整 然后除100 Math.round(num*100)/100;
SomethingJack 2014-05-19
  • 打赏
  • 举报
回复
引用 1 楼 KK3K2005 的回复:
var num = 1.25678998; Math.round(num*100)/100; Math.ceil(num*100)/100
前辈 比如 我有一个设置 设置某个金额值需要2位精度 那么我的这个变量2 该从那里处理?? tofied不行了?
KK3K2005 2014-05-19
  • 打赏
  • 举报
回复
var num = 1.25678998; Math.round(num*100)/100; Math.ceil(num*100)/100

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧