Round Javascript Float number to 2 decimal digits [duplicate] - javascript

This question already has answers here:
How to deal with floating point number precision in JavaScript?
(47 answers)
Closed 1 year ago.
In my project, when I am subtracting 96.74 from 60, javascript is giving me 36.739999999999995 , but I need 36.74 to do further calculation.
What should I do, how do I overcome this problem??
Thanks in advance.

Use parseFloat and set the decimal places to 2 with .toFixed(2)
console.log(parseFloat(36.739999999999995).toFixed(2))
If you want to get rid of trailing zeroes cast the result to a Number:
var num = Number(parseFloat(36.7).toFixed(2));
console.log(num);

Example how to round to two decimals, if that was what you wanted?
var x = 36.739999999999995;
x = Math.round(x*Math.pow(10,2))/Math.pow(10,2);
console.log(x);

Related

Why the result is like this [duplicate]

This question already has answers here:
Is floating point math broken?
(31 answers)
Closed 4 years ago.
var tm=110;
var fm=200;
var pr=Math.ceil(tm/fm*100);
console.log(pr);
The result is showing 56.
But it should be 55
Note that
tm/fm*100 is resulting 55.0000001
But
When tm=100 and all fm=200 then the result is 50
I've solved that problem concedering upto 2 decimal places after point, I could not understand where from 1 is comming after some 0s!
Math.ceil() returns the smallest integer greater than or equal to a given number. See MDN Documentation.
Remove Math.ceil()
parseFloat() pr variable
Call Float's precision method toPrecision(8)
The extra 1 you are seeing is a result of binary floating point math. JavaScript does this. Source
<script>
var tm=110;
var fm=200;
var pr= parseFloat(tm/fm*100);
alert(pr.toPrecision(8)); // output: 55.00000000
</script>

Adding Decimal to a String in Javascript [duplicate]

This question already has answers here:
How to format numbers as currency strings
(67 answers)
Closed 5 years ago.
I'm given numbers in cents:
eg.
102042
982123
121212
I want to convert them to dollars. I figured the easiest way to do this is to convert the digits into a string and add a decimal.
eg.
1020.42
9821.23
1212.12
I'm currently doing this but it only rounds to 1 decimal. What would I need to do it make it round to 2 decimals?
var number = 102042
number.toString().match(/^-?\d+(?:\.\d{0,2})?/)[0]
UPDATE: I found out what my issue was. It wasn't the rounding but the fact that I combined a lodash filter to a division incorrectly. Thanks again!
A cent is 1/100th of a dollar, so you can calculate the dollar amount by doing
dollars = number / 100
var number = 102042;
console.log(number/100);
The easiest way is to do it with the number itself, you can multiply by 0.01 or divide by 100 and you'll get that amount in dollars:
var numbers = [102042,982123,121212];
for(num of numbers)
console.log(num/100);

How to round numbers with N digits after the zero? [duplicate]

This question already has answers here:
Formatting a number with exactly two decimals in JavaScript
(32 answers)
Closed 6 years ago.
lets say I have a number in the following form: 0.00N1N2N3...(for example 0.007).
I want to round the number 0.00N1N2N3...Nn, into the follwoing number:
0.0M1M2M3..Mn.
For example:0.007 need to be round to 0.01.
Now the number can be also in the following form 0.N1...Nn or N1.N2...Nn so the solution need to be generic for all cases.
I have write the following function(Not sure if this is the right answer):
function roundup(number, precision) {
return Math.ceil(number * precision)
}
If the variable is float you can use toFixed() like
var formatted = parseFloat("345.65894").toFixed(2);
On most browsers you can use the toFixed() function.
number.toFixed(precision)
Source: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed

Javascript substracting numbers is not accurate - why [duplicate]

This question already has answers here:
Is floating point math broken?
(31 answers)
Closed 8 years ago.
I have a fiddle here: http://jsfiddle.net/94wQJ/1/ - but probably someone can advise just by looking below.
<button type="button" id="allocate">Calc</button>
$('#allocate').click(function () {
val1 = 25.00;
val2 = 16.37;
val3 = val1-val2;
alert(val3);
});
25 - 16.37 = 8.63 - however, the alert for val3 = 8.62999999999
Why is it not accurate?
Thank you,
Mark
Try Using toFixed more information here
val3.toFixed(2)
Demo Fiddle
Why is it not accurate?
This is a duplicate of Is floating point math broken?, but to answer your specific question: floating point numbers generally store the number in base 2 because it allows storing more numbers more accurately than using base 10, at the expense of not being able to exactly store all base 10 numbers even with a small number of decimal places.
Many decimal fractions not be represented exactly in binary.
Use .toFixed(2)
Please check this
val3 = Math.round(val3*100)/100;
I have update here http://jsfiddle.net/94wQJ/7/

How to get 12.6 with a=10.3 and b=2.3? [duplicate]

This question already has answers here:
How to deal with floating point number precision in JavaScript?
(47 answers)
Closed 8 years ago.
Tried :
var a=10.3;
var b=2.3;
alert(a+b);
but I get 12.600000000000001. I know JavaScript is loosely typed, but I hope I can do a sum :)
you can use toFixed() method also
var a=10.3;
var b=2.3;
alert((a+b).toFixed(1));​
Works in chrome
Multiply to the precision you want then round and divide by whatever you multiplied by:
var a=10.3;
var b=2.3;
alert(Math.round((a+b) * 10) / 10);
http://jsfiddle.net/DYKJB/3/
It's not about the typing but about the precision of floating point types. You need to round for presentation.
Floating point types are not a good choice if you need exact values. If you want to express currency values express them as cents or use an appropriate library for this.

Categories