Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
The JavaScript function
parseInt
can be used to force conversion of a given parameter to an integer, whether that parameter is a string, float number, number, etc.
In JavaScript,
parseInt(1.2)
would yield
1
with no errors, however, in TypeScript, it throws an error during compilation saying:
error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.
Am I missing something here or is it an expected behaviour from TypeScript?
–
–
–
The function parseInt
indeed expects a string
in its first argument. Please check the documentation. Usually you can omit the second, radix
argument and then it will fall back to the default of 10
. But the safest is to always add the numeric system base as second argument (usually 10
).
If you'd like to cast a general value to number
, you can use the Number
function, like this.
var myNumber = Number(myGeneralValue);
–
I think other people have already given lots of valid answers here, but in my opinion the easiest approach would be to call .toString()
on the original value, and to explicit the radix:
parseInt((1.2).toString(), 10);
–
–
parseInt (string , radix)
The parseInt
function produces an integer value dictated by interpretation of the contents of the string argument according to the specified radix.
In normal JS, the first argument is coerced to a string, based on the following rule in the spec:
Let inputString be ToString(string).
which is why parseInt(1.2)
works.
Note that the spec allows radix to be undefined
, which is the same as omitting it, hence the question mark in the radix?: number
part of the signature. In this case, of course, it defaults to 10 (unless the string looks like 0xabc
).
As mentioned in other answers, parseInt
is not the best solution anyway if what you really want to do is a floor or truncation operation.
There are different manifestations when negative numbers between 'Math.floor' and 'parseInt'.
you should use this:
1.2 | 0
or (1.2).toFixed(0)
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.