作者kusakawa (草川)
看板Soft_Job
标题Re: [讨论] 请大家聊聊 JavaScript的缺陷
时间Tue Nov 17 13:17:02 2020
※ 引述《accessdenied (存取违规)》之铭言:
: 你完全搞不清楚状况喔。
JavaScript 的概数运算确实没有实作 IEEE 754 的标准,
IEEE 754 中,Nearest value rounding 的方法有两种:
1. Banker's rounding - 取到最接近的「偶数」
2. 取到最远离 0 的数(效率佳)
但搞不清楚状况的是对该语言不熟就随便拿一个 function 来做概数的人,
今天谁敢用 toFixed 去处理概数啊 ...?它本身就不是一个处理概数的 function!
连自己在用的 function 意义都不知道,还很惊讶回传是 String 更是让人摇头。
Number.toFixed() 开宗明义就说了:
「toFixed 回传一个字串,包含此数字与指定位数的小数。」
不要用 toFixed() 处理概数是常识 ...
-
最接近概数法的是 Math.round,但是它只能处理小数点後一位,
因此必须先做数值处理,将小数点往前拉之後再处理回原位,
但 Math.round 并没有做 IEEE 754 所说的那两种方法,而是单纯的逢五进位,
因此 3.5 => 4
-3.5 => -3
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 1.169.243.127 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Soft_Job/M.1605590224.A.9EF.html
1F:推 CoNsTaR: 再次证明不能写 type annotations 造成的麻烦 11/17 13:24
2F:→ CoNsTaR: 喔对我知道,一定是因为对语言不够熟,大家都该先把标准 11/17 13:25
3F:→ CoNsTaR: 读完再来对吧 11/17 13:25
4F:→ CoNsTaR: 作个 round 还要先读标准,真是 low cost 啊 11/17 13:25
5F:→ CoNsTaR: 写个 type 多几个字真是没有人想承担的 high cost 啊 11/17 13:25
※ 编辑: kusakawa (1.169.243.127 台湾), 11/17/2020 13:26:11
CoNsTaR 大,你把两件事情混在一起了:
1. 关於 type,本来就应该知道每个 function 回传的资料型态,
今天有人很诧异为什麽 toFixed() 回传是 String,
啊文件里面就有写啊 ... 有什麽好奇怪?
2. 做 round 本来就该读标准,round 有如此多不同的方法,不知道是哪个方法你敢用?
※ 编辑: kusakawa (1.169.243.127 台湾), 11/17/2020 13:31:05
6F:→ as30385438: 原文是想重现toFixed,而不是拿他处理概述吧 11/17 13:31
请看该作者的第一篇文,即在讨论为何 toFixed() 的回传值不符合他的概数预期。
7F:嘘 samuel1988: 是你搞混了 11/17 13:59
※ 编辑: kusakawa (1.169.243.127 台湾), 11/17/2020 14:45:49
8F:推 art1: 看不出哪里搞混了 11/17 17:51
9F:→ johnidfet: 居然把read standard当作cost...前端果然是雷包很多的 11/18 14:06
10F:→ johnidfet: 环境 11/18 14:06
11F:推 mrbigmouth: 我没把标准读熟就跑去写程式然後写错 都是程式的错 11/18 17:22
12F:推 netburst: 11/19 02:00
13F:→ jobintan: 应该是人的问题才导致程式出错。 11/19 07:45