JavaScript - Keep trailing zeroes [duplicate] - javascript

This question already has answers here:
How to add a trailing zero to a price?
(3 answers)
Closed 8 years ago.
I want to parse a string and I used parseFloat(), but it removes all the trailing zeroes. How to prevent this - I need to parse the string exactly - if I have 2.5000, I need exactly the same result as a floating-point number - 2.5000.

You can do
parseFloat(2.5).toFixed(4);
If you need exactly the same floating point you may have to figure out the amount
function parseFloatToFixed(string) {
return parseFloat(string).toFixed(string.split('.')[1].length);
}
console.log(parseFloatToFixed('2.54355'));
But i don't really understand why you even need to use parseFloat then? Numbers in javascript do not retain the floating-point count. so you would have to keep them as strings, and calculate against them as floats.
Also don't forget toFixed may have weird rounding issues in different browsers, for example
console.log((0.1).toFixed(20));

Related

Javascript "toLocaleString()" function chnages decimals to zero when number is very large [duplicate]

This question already has answers here:
Node.js Maximum Safe Floating-point Number
(4 answers)
What is JavaScript's highest integer value that a number can go to without losing precision?
(21 answers)
Is floating point math broken?
(31 answers)
Closed 2 years ago.
I am developing a react app and i need to format some numbers using toLocaleString function and i realize that the decimal part of the number changes to zero when the number is very
(10000.25).toLocaleString('en',{maximumFractionDigits: 2, minimumFractionDigits: 2});
//Output: 10,000.25
(10000000000000000000.25).toLocaleString('en',{maximumFractionDigits: 2, minimumFractionDigits: 2});
//Output: 10,000,000,000,000,000,000.00
why is this so? is it a bug or am I missing something?
Javascript compiler cannot handle very large numbers. Use Number.MAX_SAFE_INTEGER to check the last number it can handle. Try to consider using string type from the beginning if these numbers are not calculated (Maybe if you get it from an API kind of), or try using BigInt type.
For floating point, the maximum number it can handle to a precision of 1 decimal digit is 562949953421311 and it differs for other digits. This has been referred here. Try using the BigNumber class in your case.

String conversion to integer [duplicate]

This question already has answers here:
How to convert a String to long in javascript?
(2 answers)
Closed 4 years ago.
I am trying to convert this "9876543210223023" into integer which is received as a string .I have used parseInt but it gets converted into 9876543210223024.
This is causing failure in my validations .
Please suggest how will the value remain same after conversion.
9876543210223023 is > than 9007199254740991, which is Number.MAX_SAFE_INTEGER.
JavaScript has a Number type, which internally is a 64 bit floating point number.
If the range is too big, the machine episilon is too large, and the number is rounded to the nearest representable number, in this case 9876543210223024.
You need a biginteger library, if you want to process numbers of this size.
If your browser is modern enough (aka Chrome/Chromium), it might have the type "BigInteger" already built-in.
In that case: BigInt("9876543210223023", 10)
Otherwise, the linked BigInt-library will act as polyfill.

why does javascript Number function return wrong value for this number? [duplicate]

This question already has answers here:
Large numbers erroneously rounded in JavaScript
(6 answers)
Closed 6 years ago.
so I ran into this issue with javascript Number() function, it seems to return the wrong value:
the following code:
Number("10153396863200835")
returns 10153396863200836, not 10153396863200835
but if I do Number("10153396863200836") it returns 10153396863200836
and Number("10153396863200834") returns 10153396863200834
so I'm confused what's going on? thanks
Because JavaScript's numbers are IEEE-754 double-precision binary floating point (frequently known as "double"). They have only about 15 digits of decimal precision. Your number, 10153396863200835, is much larger than that.
In doubles, the maximum whole number before we stop being able to represent the next whole number is 9,007,199,254,740,9921. 9,007,199,254,740,993 cannot be represented by doubles; 9,007,199,254,740,994 can. That's because at that scale, the least significant bit is worth 2 decimal. The further you go, the bigger those gaps get, as the least significant bit starts being worth 4 decimal, then 8, then...
Modern JavaScript has a handy constant for the value right before this value, 9,007,199,254,740,991: Number.MAX_SAFE_INTEGER. It's defined as the last whole number in a double where adding 1 gives you the next consequtive whole number. The name is slightly misleading, as 9,007,199,254,740,994 or indeed 10,153,396,863,200,836 aren't going to suddenly stop having those values, it's just that math with them starts getting...interesting.

String to number is wrong [duplicate]

This question already has answers here:
Large numbers erroneously rounded in JavaScript
(6 answers)
Javascript parseInt() with leading zeros
(7 answers)
Closed 7 years ago.
I'm trying to convert a string to number in Javascript, but here is my problem :
var string = "068999999501111443";
parseInt(string); // 68999999501111440
Number(string); // 68999999501111440
Why does this happen and how to fix it ?
Thanks
This is because the number is too large to be stored accurately. It is being stored as a floating point number, which can only store a certain amount of precision. Beyond it's maximum precision, you'll get what look like weird rounding errors.
You'll get similar effects for decimals with a large number of decimal places. This is more well known, as it tends to occur more often, but it's exactly the same effect that is happening here.

Javascript convert float to Exponential [duplicate]

This question already has answers here:
How can I convert numbers into scientific notation?
(3 answers)
Closed 9 years ago.
I have to convert the float to exponential..
0.0000000000000000000000000000000000000000000000000000000000000000000000000000000000000021
Using
parseFloat(result)
Gives 2.1e-87
But
10000000
Gives 10000000 (same) but I like to get 100.0e+3 etc..So I used parseFloat(result).toExponential(3); But the problem here is it is truncating everything ev even if it has more values for example 111222333 it makes it as 111.22+3 so while I reconverting as integer I am cannot get the original value..
Is there any javascript function to achieve this or how can I achieve this..
Thanks in advance..
If you use toExponential() with out the parameter, it will not drop the fractions:
console.log( (111222333).toExponential() ); // "1.11222333e+8"
The parameter specifies the amount of digits after the decimal point. If you drop it, it displays as many digits as needed (wrt to the double precision JavaScript uses internally).

Categories

Resources