以數學的原理處理 “四捨五入”
我看過太多人都把四捨五入的問題看成是 ”字串” 來處理,實際上,如果把四捨五入做為”數學”來解的話,程式只要一行即可解決。
以四捨五入取整數的例子來講,其原理就是: 任何數值+0.5 再取整數。
但要注意的是,當四捨五入遇到 “負數” 時,就會變成了 “五捨六入”,這是因為中間數要往數值大的那邊進位的緣故。所以加上了負數的處理,程式至少又多了一行:
Perl 的四捨五入
sub round{
my($value,$rank) = @_;
if($value>0){
return int($value * 10**$rank) + 0.5 / 10**$rank;
}else{
return int($value * 10**$rank) - 0.4 / 10**$rank;
}
}
print round(12.345 , 2);
round() 函式的第一個參數為欲轉換的數值,第二個參數為欲取得的位數
Javascript 的四捨五入
<script type='text/javascript'>
//方法一
function round1(value,rank){
if(value >= 0){
return parseInt(value * Math.pow(10,rank) + 0.5) / Math.pow(10,rank);
}else{
return parseInt(value * Math.pow(10,rank) - 0.4) / Math.pow(10,rank);
}
}
//方法二: 使用內建的 round 數學函數
function round2(value,rank){
return Math.round(value * Math.pow(10,rank)) / Math.pow(10,rank);
}
document.write(round1(12.345 , 2) + "<br />");
document.write(round2(12.345 , 2));
</script>
round1() 及 round2() 函式的第一個參數為欲轉換的數值,第二個參數為欲取得的位數
您可能會對以下這些文章感興趣
2007
23
8月
- Posted by citypig at 07:00 pm (4,111 views)
- Permalink for this entry
- Filed under: coding, javascript, perl
- RSS comments feed of this entry
- TrackBack URI










2008-08-21 9:29
很不錯的文章
像有些語言提供現成的round(),其實是『四捨六入五成雙』
Browser:判斷方式就有點小差異
2008-08-26 0:38
負數的處理有點問題喔。還是要減0.5才對。
Browser: