JS浮動小数点の値は正確に計算されます。

14100 ワード

from:http://rockyee.iteye.com/blog/891538

  
    
1 Number.prototype.toFixed = function (scale){
2 var s = this + "" ;
3 if ( ! scale) scale = 0 ;
4 if (s.indexOf( " . " ) == - 1 ) s += " . " ;
5 s += new Array(scale + 1 ).join( " 0 " );
6 if ( new RegExp( " ^(-|\\+)?(\\d+(\\.\\d{0, " + (scale + 1 ) + " })?)\\d*$ " ).test(s))
7 {
8 var s = " 0 " + RegExp.$ 2 , pm = RegExp.$ 1 , a = RegExp.$ 3 .length, b = true ;
9 if (a == scale + 2 )
10 {
11 a = s.match( / \d / g);
12 if (parseInt(a[a.length - 1 ]) > 4 )
13 {
14 for ( var i = a.length - 2 ; i >= 0 ; i -- )
15 {
16 a[i] = parseInt(a[i]) + 1 ;
17 if (a[i] == 10 )
18 {
19 a[i] = 0 ;
20 b = i != 1 ;
21 }
22 else
23 break ;
24 }
25 }
26 s = a.join( "" ).replace( new RegExp( " (\\d+)(\\d{ " + scale + " })\\d$ " ), " $1.$2 " );
27 }
28 if (b) s = s.substr( 1 );
29 return (pm + s).replace( / \.$ / , "" );
30 }
31 return this + "" ;
32 }
正則で四捨五入し、Number本来のtoFixedを上書きする方法
テスト:
alert(Number(9.13-9.02);
 alert(Number(9.11-9.02).toFixed(2);