PTT評價

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

看板Soft_Job標題Re: [討論] 請大家聊聊 JavaScript的缺陷作者
accessdenied
(存取違規)
時間推噓 3 推:3 噓:0 →:11

你完全搞不清楚狀況喔。

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 留言評論
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.135.20.48 (臺灣)
PTT 網址

accessdenied11/17 12:28PS:“銀行家舍入”是IEEE 規定的舍入標準。因此所

accessdenied11/17 12:28有符合IEEE標準的語言都是採用這一演算法的。

accessdenied11/17 12:28看來“所有語言“這件事並不包含 js

superpai11/17 12:39你可以試試用你的函數round 1.035是1.03還是1.04嗎?

x00003200111/17 12:41可是toFixed是回傳string耶 type就不一樣了怎麼比

superpai11/17 12:42我是說用AwayFromZero設定

accessdenied11/17 12:45 https://i.imgur.com/BS0fx5S.jpg

accessdenied11/17 12:461.035 有什麼特別含意嗎?

accessdenied11/17 12:46如果用AwayFromZero 就會是1.04

accessdenied11/17 12:50fuck! 還真的是string 耶,什麼鬼啦!你不說我還沒

accessdenied11/17 12:50發現

superpai11/17 12:51我自己沒有dotnet所以在dotnetfiddle.net算1.035 awayfr

superpai11/17 12:51omzero的結果是1.03 所以想確認一下

accessdenied11/17 13:14@superpai 你是對的,1.035 awayfromzero 有問題