Function parseInt (1/10000000) returns 1. Why?

混江龙づ霸主 提交于 2019-12-12 10:54:38

问题


Why parseInt(1/10000000) results 1, when parseInt(1/1000000) result is 0?

I need some analog to Java's int casting like int i = -1/10000000;, Which is 0.

Should I use Math.floor for positive and Math.ceil for negative? Or is there another solution?


回答1:


At first the question seems interesting. Then I looked at what 1/10000000 is.

< 1/10000000
> 1e-7

Therefore:

< parseInt("1e-7"); // note `parseInt` takes a STRING argument
> 1

If you want to truncate to an integer, you can do this:

function truncateToInteger(real) {
    return real - (real % 1);
}



回答2:


parseInt expects to parse a string argument, so converts it to a string first.

1/1000000 when converted to a string is "0.000001", parseInt then ignores everything from "." onwards, since it is for integers only, so it reads it as 0.

1/10000000 is so small that converting it to a string uses scientific notation "1e-7", parseInt then ignores everything from "e" onwards, since it is for integers only, so it reads it as 1.

Basically, parseInt is just not what you should be doing.

To convert a number to an integer, OR it with 0, since any bitwise operation in JavaScript forces the number to a 32-bit int, and ORing with 0 doesn't change the value beyond that:

>(-1/10000000)|0
0

>1234.56|0 // truncation
1234

>(2147483647+1)|0 // integer overflow
-2147483648


来源:https://stackoverflow.com/questions/27650459/function-parseint-1-10000000-returns-1-why

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!