楼主:
TonyQ (自立而后立人。)
2020-11-17 13:07:38※ 引述《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 可以用.
前文推文就提过, 此处不再赘述.