1
ss098 2017-07-19 17:38:22 +08:00
你这是字符串之间的比较,而不是数字间的比较。
|
2
BOYPT 2017-07-19 17:38:51 +08:00
没毛病啊
|
3
XiaoFaye OP 好吧,还以为 toFixed 是返回保留两位小数的数字,是我错了。。。。
PS:JS 直接对比浮点数会不会有坑呀? |
4
erichuang1994 2017-07-19 17:42:53 +08:00
字符串比较是比较字典序
|
5
akrf 2017-07-19 17:43:19 +08:00 via Android
js 就是鬼呀
|
6
gino86 2017-07-19 17:48:02 +08:00
浮点数一般都不建议用来进行比较,尤其是相等性
|
7
SakuraKuma 2017-07-19 17:58:48 +08:00 1
parseFloat 后相减<Number.EPSILON 用于比较浮点数就好了~
|
8
autoxbc 2017-07-19 20:11:34 +08:00
如果是自己玩,建议用显式转换,隐式转换坑比较多,一般人也做不到熟读规范;如果是业务代码,建议用 Math.js 库,js 处理数字有残疾。
|
9
linhaiqi 2017-07-19 20:13:07 +08:00
呵呵。。。
|
12
ech0x 2017-07-19 21:22:57 +08:00 via iPad
这其实是 IEEE 754 的锅,对于遵守 IEEE 754 标准实现浮点数的语言,直接比较浮点数大小都有坑,合理的解决方法正如 @SakuraKuma 所说的把两个浮点数相减与零比较大小。
这里有个收集语言浮点数表现的网站:0.30000000000000004.com |
13
mingyun 2017-07-20 00:21:51 +08:00
神奇的 js
|
14
Sparetire 2017-07-20 02:23:00 +08:00 via Android
js 是比较挫但这里显然不是 js 的锅,和浮点数也没个半毛钱关系,令我惊讶的是竟然只有一楼一个说得最准确。。可能二楼也知道原因,"4">"1"没毛病
|
15
zhpech 2017-07-20 02:27:13 +08:00 1
……楼里说的都是什么鬼 这是字符串之间的比较,逐字字典序比较,另外无论是 "" 还是文档都可以看出这返回的是字符串,不要动不动就黑 JS C 语言也这么比……
numObj.toFixed([digits]) Returns: A string representation of numObj that does not use exponential notation and has exactly digits digits after the decimal place. The number is rounded if necessary, and the fractional part is padded with zeros if necessary so that it has the specified length. If numObj is greater than 1e+21, this method simply calls Number.prototype.toString() and returns a string in exponential notation. |
16
Perry 2017-07-20 02:43:27 +08:00
双引号:妈蛋没人在乎我
|
17
wbswjc 2017-07-20 03:11:53 +08:00
这时候就体现 php 类型转换的人性化了 (<?php "1.1" < "2.2" == true; ?>, 我觉得要不就用强类型, 要不就把自动类型转换做得人性化一点, js 对搞不拎清的人不太友好, 坑很多, 虽然楼主说的这个应该不算坑- -
|
18
cxbig 2017-07-20 03:18:28 +08:00
@wbswjc PHP 一样有 Epsilon 的坑
http://php.net/manual/en/language.types.float.php 无论是不是动态类型的参数,在涉及比较的时候最好还是转换一下,别偷懒。 |
19
autoxbc 2017-07-20 03:30:41 +08:00
|
20
XiaoFaye OP |
21
Sirormy 2017-07-20 11:00:08 +08:00
还真没注意过,Mozilla 的文档写的。
“ A string representing the given number using fixed-point notation.” https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed |
22
caniuse 2017-07-20 12:32:51 +08:00
toFixed() 方法使用定点表示法来格式化一个数。
语法 numObj.toFixed(digits) 参数 digits 小数点后数字的个数;介于 0 到 20 (包括)之间,实现环境可能支持更大范围。如果忽略该参数,则默认为 0。 返回值 一个数值的字符串表现形式,不使用指数记数法,而是在小数点后有 digits 位数字。该数值在必要时进行四舍五入,另外在必要时会用 0 来填充小数部分,以便小数部分有指定的位数。 如果数值大于 1e+21,该方法会简单调用 Number.prototype.toString()并返回一个指数记数法格式的字符串。 抛出异常 RangeError 如果 digits 参数太小或太大。0 到 20 (包括)之间的值不会引起 RangeError。实现环境( implementations )也可以支持更大或更小的值。 TypeError 如果该方法在一个非 Number 类型的对象上调用。 示例 var numObj = 12345.6789; numObj.toFixed(); // 返回 "12346":进行四舍五入,不包括小数部分 numObj.toFixed(1); // 返回 "12345.7":进行四舍五入 numObj.toFixed(6); // 返回 "12345.678900":用 0 填充 (1.23e+20).toFixed(2); // 返回 "123000000000000000000.00" (1.23e-10).toFixed(2); // 返回 "0.00" 2.34.toFixed(1); // 返回 "2.3" -2.34.toFixed(1); // 返回 -2.3 (由于操作符优先级,负数不会返回字符串) (-2.34).toFixed(1); // 返回 "-2.3" (若用括号提高优先级,则返回字符串) 规范 Specification Status Comment ECMAScript 3rd Edition (ECMA-262) Standard Initial definition. Implemented in JavaScript 1.5. ECMAScript 5.1 (ECMA-262) Number.prototype.toFixed Standard ECMAScript 2015 (6th Edition, ECMA-262) Number.prototype.toFixed Standard 浏览器兼容性 Desktop Mobile Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari Basic support (Yes) (Yes) (Yes) (Yes) (Yes) 相关链接 Number.prototype.toExponential() Number.prototype.toPrecision() Number.prototype.toString() |
23
AJian 2017-07-20 18:38:44 +08:00 1
你可以,+a>+b
|
24
AJian 2017-07-20 18:40:30 +08:00
归根结底就是用的字符串做比较,字符串比较的是 ASCII 码
|