Changeset 22286

Show
Ignore:
Timestamp:
10/28/08 20:49:33 (5 years ago)
Author:
fujidig
Message:

strf %g %G 変換のときに %f や %e に渡す精度が間違っていたのを直した。

Location:
lang/javascript/hsp-on-js/trunk/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/hsp-on-js/trunk/src/formatter.js

    r22249 r22286  
    128128                val = Math.abs(val); 
    129129                if(isNaN(val) || val == Infinity || (1e-4 <= val && val < Math.pow(10, prec) - 0.5)) { 
    130                         // FIXME convertFloat に渡す prec の値が正しくないようなので、後で直す 
    131                         str = Formatter.convertFloat(val, {}, 0, prec - 1); 
    132                 } else { 
    133                         str = Formatter.convertExp(val, {}, 0, prec - 1); 
     130                        var prec2; 
     131                        if(isNaN(val) || val == Infinity) { 
     132                                prec2 = prec - 1; 
     133                        } else if(val == 0.0) { 
     134                                prec2 = prec; 
     135                        } else { 
     136                                var exponent = Math.floor(Math.log(val) / Math.LN10); 
     137                                prec2 = prec - exponent - 1; 
     138                                if(prec == 1 && val * Math.pow(10, -exponent) >= 9.5) prec2 --; 
     139                        } 
     140                        str = Formatter.convertFloat(val, {}, 0, prec2); 
     141                } else { 
     142                        str = Formatter.convertExp(val, {}, 0, Math.min(prec - 1, 16)); 
    134143                } 
    135144                str = str.replace(/\.(\d*?)0+(?!\d)/, function(s, d) { return d.length > 0 ? '.' + d : ''; }); 
  • lang/javascript/hsp-on-js/trunk/src/t.hsp

    r22249 r22286  
    1 mes strf("<%.2g>", 99.5) 
    2 mes strf("<%.2g>", 99.4) 
    3 mes strf("<%.1g>", 9.5) 
    4 mes strf("<%.1g>", 9.4) 
     1#include "hspmath.as" 
     2 
     3mes strf("<%.1g>", 0.001234) 
     4mes strf("<%.3f>", 0.001234) 
     5mes 
     6mes strf("<%.1g>", 0.012345) 
     7mes strf("<%.2f>", 0.012345) 
     8mes 
     9mes strf("<%.1g>", 0.123456) 
     10mes strf("<%.1f>", 0.123456) 
     11mes 
     12mes strf("<%.2g>", 1.234567) 
     13mes strf("<%.1f>", 1.234567) 
     14mes 
     15mes strf("<%.3g>", 12.34567) 
     16mes strf("<%.1f>", 12.34567) 
     17mes 
     18mes strf("<%.4g>", 123.4567) 
     19mes strf("<%.1f>", 123.4567) 
     20 
     21mes "--------------------" 
     22 
     23mes strf("<%.1g>", 0.944444) 
     24mes strf("<%.1f>", 0.944444) 
     25mes 
     26mes strf("<%.1g>", 0.955555) 
     27mes strf("<%.0f>", 0.955555) 
     28mes 
     29mes strf("<%.2g>", 0.955555) 
     30mes strf("<%.2f>", 0.955555) 
     31 
     32mes "--------------------" 
     33 
     34mes strf("<%.1g>", 0.094444) 
     35mes strf("<%.2f>", 0.094444) 
     36mes 
     37mes strf("<%.1g>", 0.095555) 
     38mes strf("<%.1f>", 0.095555) 
     39mes 
     40mes strf("<%.2g>", 0.095555) 
     41mes strf("<%.3f>", 0.095555) 
     42 
     43mes "--------------------" 
     44 
     45mes strf("<%.1g>", 9.444444) 
     46mes strf("<%.0f>", 9.444444) 
     47mes 
     48mes strf("<%.1g>", 9.555555) 
     49mes strf("<%.0e>", 9.555555) 
     50mes 
     51mes strf("<%.2g>", 9.555555) 
     52mes strf("<%.1f>", 9.555555) 
     53 
     54mes "--------------------" 
     55 
     56inf = 1e300 * 1e300 
     57mes strf("<%.3g>", inf) 
     58mes strf("<%.2f>", inf) 
     59mes 
     60mes strf("<%.1g>", inf) 
     61mes strf("<%.0f>", inf) 
     62 
     63mes "--------------------" 
     64 
     65mes strf("<%.2g>", 123.4) 
     66mes strf("<%.1e>", 123.4) 
     67mes 
     68mes strf("<%.300g>", DBL_MAX) 
     69mes strf("<%.16e>", DBL_MAX) 
     70mes 
     71mes strf("<%.10g>", DBL_MIN) 
     72mes strf("<%.9e>", DBL_MIN) 
     73mes 
     74mes strf("<%.1g>", 1.23e-5) 
     75mes strf("<%.0e>", 1.23e-5) 
     76