Re: [讨论] 请大家聊聊 JavaScript的缺陷

楼主: accessdenied (存取违规)   2020-11-17 12:25:36
你完全搞不清楚状况喔。
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 一样四舍五入的数字,让我知道
算救贫道一命。
感恩
楼主: accessdenied (存取违规)   2020-11-17 12:28:00
PS:“银行家舍入”是IEEE 规定的舍入标准。因此所有符合IEEE标准的语言都是采用这一算法的。看来“所有语言“这件事并不包含 js
作者: superpai (超级白)   2020-11-17 12:39:00
你可以试试用你的函数round 1.035是1.03还是1.04吗?
作者: x000032001 (版废了该走了)   2020-11-17 12:41:00
可是toFixed是回传string耶 type就不一样了怎么比
作者: superpai (超级白)   2020-11-17 12:42:00
我是说用AwayFromZero设定
楼主: accessdenied (存取违规)   2020-11-17 12:45:00
https://i.imgur.com/BS0fx5S.jpg1.035 有什么特别含意吗?如果用AwayFromZero 就会是1.04fuck! 还真的是string 耶,什么鬼啦!你不说我还没发现
作者: superpai (超级白)   2020-11-17 12:51:00
我自己没有dotnet所以在dotnetfiddle.net算1.035 awayfromzero的结果是1.03 所以想确认一下
楼主: accessdenied (存取违规)   2020-11-17 13:14:00
@superpai 你是对的,1.035 awayfromzero 有问题

Links booklink

Contact Us: admin [ a t ] ucptt.com