作者accessdenied (存取违规)
看板Soft_Job
标题Re: [讨论] 请大家聊聊 JavaScript的缺陷
时间Tue Nov 17 12:25:36 2020
你完全搞不清楚状况喔。
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://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1605587138.A.A64.html
1F:→ accessdenied: PS:“银行家舍入”是IEEE 规定的舍入标准。因此所 11/17 12:28
2F:→ accessdenied: 有符合IEEE标准的语言都是采用这一演算法的。 11/17 12:28
3F:→ accessdenied: 看来“所有语言“这件事并不包含 js 11/17 12:28
4F:推 superpai: 你可以试试用你的函数round 1.035是1.03还是1.04吗? 11/17 12:39
5F:→ x000032001: 可是toFixed是回传string耶 type就不一样了怎麽比 11/17 12:41
6F:推 superpai: 我是说用AwayFromZero设定 11/17 12:42
8F:→ accessdenied: 1.035 有什麽特别含意吗? 11/17 12:46
9F:→ accessdenied: 如果用AwayFromZero 就会是1.04 11/17 12:46
10F:→ accessdenied: fuck! 还真的是string 耶,什麽鬼啦!你不说我还没 11/17 12:50
11F:→ accessdenied: 发现 11/17 12:50
12F:推 superpai: 我自己没有dotnet所以在dotnetfiddle.net算1.035 awayfr 11/17 12:51
13F:→ superpai: omzero的结果是1.03 所以想确认一下 11/17 12:51
14F:→ accessdenied: @superpai 你是对的,1.035 awayfromzero 有问题 11/17 13:14