在javascript中,浮點數的運算都會遇到這個誤差的問題,例如一開始所問的0.1+0.2,實際上javascript運算的時候可能為0.10000000000000001+ ... ... <看更多>
javascript浮點數誤差 在 JavaScript 浮点数陷阱及解法· Issue #9 · camsong/blog 的推薦與評價
下面再以0.1 例解释浮点误差的原因, 0.1 转成二进制表示为0.0001100110011001100 ... js 浮點數運算gracekrcx/weekly-notes#109. Open. @100pah 100pah ... ... <看更多>
javascript浮點數誤差 在 Re: [問題] 請教一下java script算數學有誤差的問題? 的推薦與評價
※ 引述《kicksmile (aa)》之銘言:
: function cal(){
: sum.value='$ '+(t11+t22+t33+t44+t55);
: }
: function callbylist1(){
: t11=i1.value*q1.value;// i1.value是物品價錢,q1.value是client輸入的數量
: cal(); //call cal()去算總total
: }
: .
: .
: .
: function callbylist5(){
: t55=i5.value*q5.value;
: cal();
: }
: 可是算出來有時候會出現誤差
: 有時候又會正常
: 正常是沒有小數點的,因為都是整數相乘
: 但有時會出現這種情形59.849999999999994
: 請問有人有相同情形嗎要怎麼解決呢
: 謝謝
: 從網路查了一下,有篇文章是說javascript計算都會有此問題,浮點數運算問題
呵呵 這可不是"JavaScript"本身的問題喔 這是我們二進位電腦的先天"缺陷"
以我們電腦系統base 2的浮點數格式要去計算表示base 10的實數系統本來就會有
不可避免的誤差(在這系統下 你也只能以最接近的二進位可表示的數值去表示部份實數值)
你用C語言寫也一樣:
float v1 = 100;
float v2 = 0.1;
if ((v1 * v2) == 10)
printf("這真是個完美的世界!");
else
printf("這世界就是這樣~");
: 所以要display的話,可以用Math.round()解決這個問題
: 如要精確到小數第二位,就乘100, round,在除以100
: x=Math.round( x* 100 ) /100
: 詳細內容轉自https://www.takka.com.hk/jstutor/ch18/ch18.htm
: 不過這個方法頗呆,不知道有沒有更聰明的方法哈
不, 這方法頗好 反正你也只能求某個程度的精準
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.131.6.24
... <看更多>