2 + 2

2021-05-15 22:24:19 +08:00
 PeacePeach
Console
> 2 + 2
> 4
> "2" + "2"
> "22"
> 2 + 2 - 2
> 2
> "2" + "2" - "2"
> 20
3654 次点击
所在节点    JavaScript
22 条回复
pabupa
2021-05-15 22:37:00 +08:00
😅
iOCZ
2021-05-15 22:51:06 +08:00
+字符串优先,-只能数字
kindjeff
2021-05-15 22:54:37 +08:00
xiri
2021-05-16 02:34:40 +08:00
优秀的语言🐶
SilencerL
2021-05-16 02:40:45 +08:00
https://v2c.tech/Article/121
当初我还用神奇的 JS 这个梗做了几张 PPT
falcon05
2021-05-16 02:45:42 +08:00
it′s not a bug , it is a feature .😏
LeeReamond
2021-05-16 03:51:20 +08:00
谢谢你,javascript!
Pastsong
2021-05-16 07:59:35 +08:00
这些都是 ECMAScript language specification 的预定义行为,也不奇怪吧
Perry
2021-05-16 08:18:01 +08:00
同意楼上,都是按照 specification 来的东西。谁说一个语言的执行结果一定要按照你的直觉来?
hello2060
2021-05-16 08:24:49 +08:00
多大点事啊, 就连我这种 java 程序员都知道 js 的这几个幺蛾子
guanghua812
2021-05-16 08:46:28 +08:00
"+"字符串拼接,"-"做运算
statement
2021-05-16 08:49:14 +08:00
我都是-0 然后再加
TonyG
2021-05-16 10:00:10 +08:00
var name = 1
name + 1
let name = 1
name + 1
Biwood
2021-05-16 10:04:58 +08:00
litel
2021-05-16 11:54:55 +08:00
> 100*0.014
<· 1.4000000000000001
GM
2021-05-16 12:06:16 +08:00
这样一个辣鸡语言,居然成了他妈的最流行的语言,这个世界到底是怎么了。
charlie21
2021-05-16 12:16:51 +08:00
Binary floating point math is like THIS. In most programming languages, it is based on the IEEE 754 standard.
所以,一切要从说起 IEEE 754 standard 说起、从二进制电脑如何模拟十进制运算说起

* Is floating point math broken?
https://stackoverflow.com/questions/588004/is-floating-point-math-broken

JavaScript treats decimals as floating point numbers, which means operations like addition might be subject to rounding error. You might want to take a look at this article: What Every Computer Scientist Should Know About Floating-Point Arithmetic

Just for information, ALL numeric types in javascript are IEEE-754 Doubles.

JavaScript uses the IEEE 754 standard for Math, it makes use of 64-bit floating numbers. This causes precision errors when doing floating point (decimal) calculations, in short, due to computers working in Base 2 while decimal is Base 10.

In most programming languages, it is based on the IEEE 754 standard.
Binary floating point math is like this. In most programming languages, it is based on the IEEE 754 standard.


P.S.
位数问题,math broken 情况,数字精度问题最终是位数问题

C# 是有通过专门的 decimal 数据类型作为值类型来解决这个问题的(),搜 C# do math float or decimal

https://stackoverflow.com/questions/753948/why-is-floating-point-arithmetic-in-c-sharp-imprecise

C# float only has 7 digit precision, and 99.999999f has 8 digits.
A single-precision IEEE-754 float will only be 32-bits, which gives around 7 decimal digits of precision. If you want better than that, use a double.

C# 是有通过专门的 decimal 数据类型作为值类型来解决这个问题的,搜 IEEE-754 vs C# decimal

https://stackoverflow.com/questions/9079225/decimal-type-in-c-sharp-vs-ieee-754-standard

C# decimal doesn't follow the same rules as IEEE 754 floating point numbers. The C# 4 specification is quite clear on how it should behave ... 别的语言应该有类似的库

关于 C# decimal 数据类型本身的弱点:
as far as I know, decimal is not compatible with anything - it's a Microsoft only invention - so you can't think of it in the same terms as normal floating point stuff. And it doesn't have subnormal values.

P.S.
你看到的控制台输出怪异结果(或者编程语言的怪异行为)是一个根据 IEEE-754 作浮点数运算的计算机语言如何处理浮点数的正确方式。别大惊小怪了
aragakiyuii
2021-05-17 06:53:24 +08:00
xingguang
2021-05-17 16:02:37 +08:00
@GM 世界上有两种语言:没人用的语言和一只被人骂的语言
DOLLOR
2021-05-17 16:35:15 +08:00
JS 月经贴。

尤其是 0.1+0.2 这个问题,无非是 JS 更出名更容易欺负罢了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/777158

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX