EvoTalk

23 八月, 2007

JavaScript : 指定小數點第N位四捨五入

Posted by: asd In: Code Snippet| Script| 程式設計 ()

節錄自摩力學園

JAVASCRIPT:
  1. <div>
  2. <pre>&lt;html&gt;
  3. &lt;script language="javascript"&gt;
  4. function adv_format(value,num) //四捨五入
  5. {
  6.     var a_str = formatnumber(value,num);
  7.     var a_int = parseFloat(a_str);
  8.     if (value.toString().length&gt;a_str.length)
  9.     {
  10.         var b_str = value.toString().substring(a_str.length,a_str.length+1);
  11.         var b_int = parseFloat(b_str);
  12.         if (b_int&lt;5)
  13.         {
  14.             return a_str;
  15.         }
  16.         else
  17.         {
  18.             var bonus_str,bonus_int;
  19.             if (num==0)
  20.             {
  21.                 bonus_int = 1;
  22.             }
  23.             else
  24.             {
  25.                 bonus_str = "0.";
  26.                 for (var i=1; i&lt;num; i++)
  27.                     bonus_str+="0";
  28.                 bonus_str+="1";
  29.                 bonus_int = parseFloat(bonus_str);
  30.             }
  31.             a_str = formatnumber(a_int + bonus_int, num);
  32.         }
  33.     }
  34.     return a_str;
  35. }
  36.  
  37.  
  38. function formatnumber(value,num) //直接去尾
  39. {
  40.     var a,b,c,i;
  41.     a = value.toString();
  42.     b = a.indexOf('.');
  43.     c = a.length;
  44.     if (num==0)
  45.     {
  46.         if (b!=-1)
  47.             a = a.substring(0,b);
  48.     }
  49.     else
  50.     {
  51.         if (b==-1)
  52.         {
  53.             a = a + ".";
  54.             for (i=1;i&lt;=num;i++)
  55.                 a = a + "0";
  56.         }
  57.         else
  58.         {
  59.             a = a.substring(0,b+num+1);
  60.             for (i=c;i&lt;=b+num;i++)
  61.                 a = a + "0";
  62.         }
  63.     }
  64.     return a;
  65. }
  66.  
  67. document.write(adv_format((15.75+1.15) * 0.93, 2));
  68. &lt;/script&gt;
  69. &lt;/html&gt;</pre>
  70. </div>

Tags:

Releated Posts



3 Responses to "JavaScript : 指定小數點第N位四捨五入"

1 | Citypig

八月 23rd, 2007 at 18:50

Avatar

四捨五入的問題如果把它當成是 "數學" 來解的話,程式只要一行即可:

function round1(value,num){
return parseInt(value * Math.pow(10,num) + 0.5) / Math.pow(10,num);
}
function round2(value,num){
return Math.round(value * Math.pow(10,num)) / Math.pow(10,num);
}
document.write(round1((15.75+1.15) * 0.93, 2) + "");
document.write(round2((15.75+1.15) * 0.93, 2));

上面兩個函式 round1() 及 round2() 都可以達到你要的功能,round1() 是用數學的原理來解,可以應用到其它的程式語言,round2() 是用 javascript 內建的 round() 函數來解。

我看過太多人都把四捨五入的問題當成是 "字串" 來處理。

2 | asd

八月 24th, 2007 at 0:28

Avatar

感謝您的指導!

3 | Lak

八月 7th, 2008 at 16:37

Avatar

其實 JavaScript 對於數字物件的處理做的滿完整的。
下面這篇也有關 JavaScript 對數字物件的用法。
num.toFixed(n)
也可以做到 n 位數的四捨五入。

http://lak4cyut.blogspot.com/2008/05/round-vbscript.html

Comment Form