Re: [問題] 請教一下java script算數學有誤差的問題?

看板Web_Design作者 (IE是最棒的瀏覽器)時間19年前 (2006/07/29 03:45), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串2/2 (看更多)
※ 引述《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 : 詳細內容轉自http://www.takka.com.hk/jstutor/ch18/ch18.htm : 不過這個方法頗呆,不知道有沒有更聰明的方法哈 不, 這方法頗好 反正你也只能求某個程度的精準 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 220.131.6.24
文章代碼(AID): #14ocbj3z (Web_Design)
文章代碼(AID): #14ocbj3z (Web_Design)