日期:2014-05-16 浏览次数:20434 次
今天碰到个这个问题,需要将小数的最末位按照给如下规则进行进位:
?
<script>
function fix(d) {
if (parseInt(d) == d) return d;
// 小数变整数.
var len = 1;
while (parseInt(d) != d) {
d = d * 10;
len *= 10;
}
// 取末位
var last = Math.abs(len == 1 ? 0 : d % 10);
var d1 = d - last;
if (last >= 0 && last < 5) {
d1 = d1 + 5;
} else {
d1 = d1 + 10;
}
d1 = d1 / len;
return d1;
}
var test = [-12.365, 198.8, 6, 1.2, 1.4, 1.5, 1.38, 1.70, 3.156];
for (var i = 0; i < test.length; i++) {
document.write(test[i] + " ==> " + fix(test[i]) + "<br/>");
}
</script>
当然,js的精度有限,比如 3.1561 ==> 3.1561000000000012。
?
如果用Java实现的话,自然要考虑使用BigDecimal实现,不然的话,如果小数位数过长,不够存。
?
请教js保持精度的方法。