先上代码
class main {
public static void main(String[] args) {
double a = 0.1;
double b = 0.2;
System.out.println(0.1+0.2);
}
}
今晚参加个面基活动, 有人提出可以利用 js 做浏览器端科学运算, 然后又又又有人立刻反驳 0.1+0.2 这个问题, 连前端自己都黑.
嗯....IEEE754 了解一下? 将来报道出现了偏差你们是要负责的.
ps: 今晚的面基活动挺有意思的, 大部分内容是心脏按摩, 要扛得住压力, node.js 一把梭就是干, 不要怂.
1
joouis 2018-07-06 23:55:36 +08:00 via Android
没觉得有人黑呀,py 也是,如楼主所说就是 IEEE754 规定的~
|
2
ToT 2018-07-06 23:57:28 +08:00
是 double 型 精度问题么?
''' >>> 0.1+0.2 Out[2]: 0.30000000000000004 ''' |
3
jiang42 2018-07-06 23:58:28 +08:00 via iPhone
一般黑的是一加一不等于二吧……
|
4
fulvaz OP 嗯....append 为啥不见了. 嗯....能不能发出来呢
[img]( https://leanote.com/api/file/getImage?fileId=5b3f9219ab644153560029a4) <img src="https://leanote.com/api/file/getImage?fileId=5b3f9219ab644153560029a4"> |
6
fulvaz OP 一般黑的应该是 js 那套令人糟心的转换规则
除了===, 其他比较运算符会自动进行类型转换, 甚至对对象也进行转换 +, -也会进行类型转换 emac262 有详细说明----然后你会发现红宝书(js 高级编程)讲漏了, 或者是书上的表述不准确, 但是这并不能说红宝书不好, 至少你能直接啃 emac262 之前, 红宝书带你入门了 但是一般人也不会写出这种东西来, 因为上一个死活要让数字和数组比出大小的人已经被开除了. |
7
rabbbit 2018-07-07 00:10:18 +08:00
烦人的是面试总考这些东西,有时侯不注意会踩坑
刚遇到的 当一个对象被传递给 fill 方法的时候, 填充数组的是这个对象的引用. > a = new Array(9).fill([]) [ [], [], [], [], [], [], [], [], [] ] > a[0][0] = 1 1 > a [ [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ], [ 1 ] ] |
8
ca1123 2018-07-07 00:19:08 +08:00 1
浮点运算是对 “自然数域” 的模拟,甚至不能这么简单说。从抽象功能到具体实现,逐步放弃一些东西,基本是:
自然数运算 -> 有理数运算 -> 有限位数的小数运算 -> 浮点运算 -> 布尔代数运算 -> ALU 硬件 Mathematica 之类这种大型软件解决了自然数里面,抽象定义无理数的问题。(当然也包括其它数学结构) 有理数运算是可以用高级语言实现的,就像 R 之类的东西提供的功能。 有限位数小数运算,计算器做的就比较好。他会四舍五入。 浮点运算是为了迁就 ALU 做出来的,效率比较高,你可以假装定义上的缺陷是误差来编程,也没什么大碍。 ALU 就是基本的电路逻辑了。 |
9
ca1123 2018-07-07 00:20:52 +08:00
或者基本上有限位数的小数运算等同于整数运算,再加上控制上下溢出和点小数点。
|
10
startar 2018-07-07 00:51:02 +08:00 via Android
没有整数类型 在某些场景下是个坑。尤其是用到 int64 的时候
|
11
Raymon111111 2018-07-07 01:52:38 +08:00
为啥可以无脑的
[] + {} ? {} + [] ? 允许这种行为的语言??? |
12
janxin 2018-07-07 09:14:12 +08:00 via iPad
你根本不了解 js 力量系列
|
13
lamCJ 2018-07-07 09:44:45 +08:00 via iPhone
老板催进度 竞争对手又是巨硬 程序员在亚历山大的情况下 10 天搞出来的东西 可能本身就没考虑那么多吧(误+笑
另外谁能在互联网刚开始( 1994+1 )的时候 就能预料到因为 0.1+0.2 !== 0.3 会给现代程序员带来的“忧伤”呢?毕竟从数制转换原理的层面上 这种现象只是没有伪装 直接表现出来而已 也不光 js 一个 |
14
fulvaz OP @Raymon111111 因为很简单....前端永远不知道后端会传来什么奇奇怪怪的值, 也不知道用户会传来什么奇怪的值, 有些值就算错了也没关系, 可能 ui 上也看不到, 这样宽容的设计在前端没问题啊, ui 总不能随便崩对吧?
|
15
azh7138m 2018-07-07 10:54:49 +08:00 via Android 1
@lamCJ 不会带来忧伤,浮点数就是这个样子的,换个语言也这样,或者说是,为这种特性能 js 的,应该是没有系统的学过 cs
|
16
ca1123 2018-07-07 12:16:42 +08:00
靠,我说的自然数其实是实数的意思。。。
|
18
suduo1987 2018-07-10 11:16:50 +08:00
http://0.30000000000000004.com/
了解一下,不光是 JS |