Re: [討論] 請大家聊聊 JavaScript的缺陷

看板Soft_Job作者 (存取違規)時間5年前 (2020/11/17 12:25), 編輯推噓3(3011)
留言14則, 3人參與, 5年前最新討論串15/19 (看更多)
你完全搞不清楚狀況喔。 dotnet 的 Math.Round() 預設是 四捨六入(五遇到前面為基數才進位)的設計,也就是 銀行家捨入法,也就是第三個參數為 ToEven 模式,我指定 AwayFromZero 是因為想走四 捨五入。 拔掉這個,走四捨六入也行,dotnet 就是照本宣科來,根本沒有你說的浮點數精確錯誤 的問題。 https://i.imgur.com/u1WLSnh.jpg
上圖的結果可以明確顯示, JS 的 toFixed() 這爛東西跟 dotnet 根本沒有可比性。js 完全是胡來的。 你可以參考這篇文章了解這個機制: https://www.itread01.com/p/1421856.html 順便求助一下啦,我為何一直戰 js round 這件事?因為我需要一個實作可以讓 dotnet 算出 js toFixed() 一樣結果的 function,但越是研究 toFixed()呈現的結果,越是靠 北。 如果知道哪邊有現成的實作,可以讓 dotnet 算出跟 js 一樣四捨五入的數字,讓我知道 算救貧道一命。 感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.20.48 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Soft_Job/M.1605587138.A.A64.html

11/17 12:28, 5年前 , 1F
PS:“銀行家舍入”是IEEE 規定的舍入標準。因此所
11/17 12:28, 1F

11/17 12:28, 5年前 , 2F
有符合IEEE標準的語言都是採用這一演算法的。
11/17 12:28, 2F

11/17 12:28, 5年前 , 3F
看來“所有語言“這件事並不包含 js
11/17 12:28, 3F

11/17 12:39, 5年前 , 4F
你可以試試用你的函數round 1.035是1.03還是1.04嗎?
11/17 12:39, 4F

11/17 12:41, 5年前 , 5F
可是toFixed是回傳string耶 type就不一樣了怎麼比
11/17 12:41, 5F

11/17 12:42, 5年前 , 6F
我是說用AwayFromZero設定
11/17 12:42, 6F

11/17 12:45, 5年前 , 7F

11/17 12:46, 5年前 , 8F
1.035 有什麼特別含意嗎?
11/17 12:46, 8F

11/17 12:46, 5年前 , 9F
如果用AwayFromZero 就會是1.04
11/17 12:46, 9F

11/17 12:50, 5年前 , 10F
fuck! 還真的是string 耶,什麼鬼啦!你不說我還沒
11/17 12:50, 10F

11/17 12:50, 5年前 , 11F
發現
11/17 12:50, 11F

11/17 12:51, 5年前 , 12F
我自己沒有dotnet所以在dotnetfiddle.net算1.035 awayfr
11/17 12:51, 12F

11/17 12:51, 5年前 , 13F
omzero的結果是1.03 所以想確認一下
11/17 12:51, 13F

11/17 13:14, 5年前 , 14F
@superpai 你是對的,1.035 awayfromzero 有問題
11/17 13:14, 14F
文章代碼(AID): #1Vir32fa (Soft_Job)
討論串 (同標題文章)
以下文章回應了本文 (最舊先):
完整討論串 (本文為第 15 之 19 篇):
文章代碼(AID): #1Vir32fa (Soft_Job)