浮動小数点!100、10で精度が変わる!
6079 ワード
まずウェブサイトを貼ります。詳しく書いたような気がします。原理は全部分析したようですが、あまり見ていません。どうやって解決しますか?
http://justjavac.iteye.com/blog/1864938
現象:
0.56*100 // 56.00000000000001
0.56*10 // 5.6000000000000005
0.57*10 // 5.699999999999999
5.6/10 // 0.5599999999999999
ie 6を含むブラウザは全部そうです。
シーンが現れる
0.56を表示する必要があります。 56%と、なんと56.00000%となりました。
解決:
正常なようです
0.57*1000/10
しかし、このような状況の問題は依然として:
0.5757*1000/10 // 57.57000000000001
理由は:575.7/10 // 5.7 10
規則を発見します:0.56、5.6の近くの1位あるいは2位の小数が100あるいは10に対して乗除を行うことを免れます。
だから:
方案1:まず小数より多い桁の倍数を乗じて、更に余分な倍数を除去する。
0.5757*100000/1000 //
しかし、この案は原理に依存していないので、ほとんどの直感によるものです。シナリオ2:まず文字列を回転して、小数点を移動します。
function toPercent(num) {
var arr = (num + '').split('.'),
otherHalf = (arr[1] ? arr[1] : '') + '000';
otherHalf = otherHalf.substr(0, 2) + '.' + otherHalf.substr(2);
return (arr[0] + otherHalf) * 1;
}
toPercent(.57) // 57
toPercent(5.7) // 570
toPercent(57) // 5700
なんだか上の案の2が足りなくて、効率がよくないです。考えてみて、上の最適化案を見てください。方案3:正則を使う
function toPercent(num) {
return (num + '00').replace(/\.([\d]{2})/,'$1.') * 1;
}
転載先:https://www.cnblogs.com/cqlql/p/5677557.html