由于页面中的一些数据可能动态改变,然后我需要根据设置的精度位数来实现金额的四舍五入精度化
测试过以后 发现toFixed 有问题 好像不是在四舍五入.
还要考虑浏览器兼容性 不知道大家是怎么解决的?
也不知道当初JavaScript为什么这么设计?
11 个解决方案
#1
var num = 1.25678998;
Math.round(num*100)/100;
Math.ceil(num*100)/100
Math.round(num*100)/100;
Math.ceil(num*100)/100
#2
前辈 比如 我有一个设置 设置某个金额值需要2位精度 那么我的这个变量2 该从那里处理??
tofied不行了?
#3
我不是写了
你的数字乘100 再取整 然后除100
Math.round(num*100)/100;
你的数字乘100 再取整 然后除100
Math.round(num*100)/100;
#4
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));
(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));
#5
解决办法:
var num = 8.985;
alert((num+((0.5).toFixed(0)==1?0.005:0)).toFixed(2));
var num = 8.985;
alert((num+((0.5).toFixed(0)==1?0.005:0)).toFixed(2));
#6
不对,不对
toFixed 的问题还不少,单用toFixed还不好解决,郁闷了
toFixed 的问题还不少,单用toFixed还不好解决,郁闷了
#7
不是 你没有明白我的意思 你这个只是计算了金额值 如果我要保留的小叔位数是动态设置呢?
#8
是唉 这个问题比较郁闷
#9
<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>
#10
Math.toFixed(保留小数位数)。
用保留小数位数后的一个小数来确定是四舍还是五入。
本人单独测试toFixed时四舍五入是没有问题的。不信楼主也自己试一下。
用保留小数位数后的一个小数来确定是四舍还是五入。
本人单独测试toFixed时四舍五入是没有问题的。不信楼主也自己试一下。
#11
不是每个都有问题的,你可以试试0.955
#1
var num = 1.25678998;
Math.round(num*100)/100;
Math.ceil(num*100)/100
Math.round(num*100)/100;
Math.ceil(num*100)/100
#2
前辈 比如 我有一个设置 设置某个金额值需要2位精度 那么我的这个变量2 该从那里处理??
tofied不行了?
#3
我不是写了
你的数字乘100 再取整 然后除100
Math.round(num*100)/100;
你的数字乘100 再取整 然后除100
Math.round(num*100)/100;
#4
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));
(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));
#5
解决办法:
var num = 8.985;
alert((num+((0.5).toFixed(0)==1?0.005:0)).toFixed(2));
var num = 8.985;
alert((num+((0.5).toFixed(0)==1?0.005:0)).toFixed(2));
#6
不对,不对
toFixed 的问题还不少,单用toFixed还不好解决,郁闷了
toFixed 的问题还不少,单用toFixed还不好解决,郁闷了
#7
不是 你没有明白我的意思 你这个只是计算了金额值 如果我要保留的小叔位数是动态设置呢?
#8
是唉 这个问题比较郁闷
#9
<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>
#10
Math.toFixed(保留小数位数)。
用保留小数位数后的一个小数来确定是四舍还是五入。
本人单独测试toFixed时四舍五入是没有问题的。不信楼主也自己试一下。
用保留小数位数后的一个小数来确定是四舍还是五入。
本人单独测试toFixed时四舍五入是没有问题的。不信楼主也自己试一下。
#11
不是每个都有问题的,你可以试试0.955