作者TonyQ (得理饶人)
看板Soft_Job
标题Re: [讨论] 请大家聊聊 JavaScript的缺陷
时间Tue Nov 17 13:07:38 2020
※ 引述《accessdenied (存取违规)》之铭言:
: 你完全搞不清楚状况喔。
: 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 一样四舍五入的数字,让我知道
: 算救贫道一命。
: 感恩
其实我上一篇已经有提到 Rounding mode 的选择是关键了了,
然後那个不叫四舍六入......
另外 tofixed 又谁跟你说他是四舍五入了....
他是用浮点数的定位表示法(fixed-point notation) 计算的, 详细实作有点罗嗦,
自己翻论文.
你的 csharp 好棒棒, 你就没想过我上一篇是自己跑过才回的吗
一定要把脸凑上来让我打吗 XD
dotnet framework 4.7.1/csharp 7.3
https://imgur.com/JddrvWW
另外如果要稳定的计算, 特别是牵扯到钱的,
都建议用 decimal , 会比较安全一点.
https://imgur.com/ZhQ5iQW
各位客官, 这两篇真的不是我的锅啊,
我只是回应一个不知道浮点数有多险恶的人而已.
另外如果想让 js 在浮点数处理写得更稳定一点, 有 decimal.js 可以用.
前文推文就提过, 此处不再赘述.
--
I have a dream, it's silly but beautiful.
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 210.61.209.201 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1605589660.A.B39.html
※ 编辑: TonyQ (210.61.209.201 台湾), 11/17/2020 13:09:12
1F:推 CoNsTaR: 处理个浮点数都要研究要用什麽 lib,真是 low cost 啊 11/17 13:27
2F:→ CoNsTaR: 我喜欢 11/17 13:27
low cost 是相对的啊,不然你在 web 找个不用的,还是哪个语言原生 double 就用这种方式实作的。
lol
※ 编辑: TonyQ (223.137.174.34 台湾), 11/17/2020 13:39:29
3F:→ petercoin: 这一整串看下来,最佳解是不是不要碰js... 11/17 14:02
4F:→ thund: 但写前端目前来说不可能不碰JS的XD 11/17 14:11
5F:→ petercoin: 只能说还好我不是前端的XD 11/17 14:14
6F:→ testPtt: 微软派来的可以不碰又能解决问题 不过几乎都是全端 11/17 15:15
7F:→ BoXeX: 微软那种单一大公司推的技术死太多个了 尤其是这种不能 11/17 18:32
8F:→ BoXeX: 无痛转换到其他技术的 危险 11/17 18:32
9F:→ BoXeX: 强烈建议本科的在台湾不要当前端 11/17 18:34
10F:→ BoXeX: 当了代表你那四或六年完全白费了 11/17 18:34
是也没这麽夸张。
11F:→ testPtt: 微软这几年就靠IDE打趴各家了 台湾学校只会更多教这家的 11/17 19:54
※ 编辑: TonyQ (223.136.191.168 台湾), 11/17/2020 19:55:33
12F:→ jej: 目前在各大装置上还是主流阿 用js搞RWD才是邪魔歪道吧 11/17 20:51
13F:→ jej: 说到这个用浏览器当FB, IG 让我成功戒掉FB和IG 所以你觉得呢 11/17 20:51