Truncate number to two decimal places without rounding

Javascript

Javascript Problem Overview


Suppose I have a value of 15.7784514, I want to display it 15.77 with no rounding.

var num = parseFloat(15.7784514);
document.write(num.toFixed(1)+"<br />");
document.write(num.toFixed(2)+"<br />");
document.write(num.toFixed(3)+"<br />");
document.write(num.toFixed(10));

Results in -

15.8
15.78
15.778
15.7784514000 

How do I display 15.77?

Javascript Solutions


Solution 1 - Javascript

Convert the number into a string, match the number up to the second decimal place:

function calc(theform) {
    var num = theform.original.value, rounded = theform.rounded
    var with2Decimals = num.toString().match(/^-?\d+(?:\.\d{0,2})?/)[0]
    rounded.value = with2Decimals
}

<form onsubmit="return calc(this)">
Original number: <input name="original" type="text" onkeyup="calc(form)" onchange="calc(form)" />
<br />"Rounded" number: <input name="rounded" type="text" placeholder="readonly" readonly>
</form>

The toFixed method fails in some cases unlike toString, so be very careful with it.

Solution 2 - Javascript

Update 5 Nov 2016

New answer, always accurate

function toFixed(num, fixed) {
    var re = new RegExp('^-?\\d+(?:\.\\d{0,' + (fixed || -1) + '})?');
    return num.toString().match(re)[0];
}

As floating point math in javascript will always have edge cases, the previous solution will be accurate most of the time which is not good enough. There are some solutions to this like num.toPrecision, BigDecimal.js, and accounting.js. Yet, I believe that merely parsing the string will be the simplest and always accurate.

Basing the update on the well written regex from the accepted answer by @Gumbo, this new toFixed function will always work as expected.


Old answer, not always accurate.

Roll your own toFixed function:

function toFixed(num, fixed) {
    fixed = fixed || 0;
    fixed = Math.pow(10, fixed);
    return Math.floor(num * fixed) / fixed;
}

Solution 3 - Javascript

I opted to write this instead to manually remove the remainder with strings so I don't have to deal with the math issues that come with numbers:

num = num.toString(); //If it's not already a String
num = num.slice(0, (num.indexOf("."))+3); //With 3 exposing the hundredths place
Number(num); //If you need it back as a Number

This will give you "15.77" with num = 15.7784514;

Solution 4 - Javascript

Another single-line solution :

number = Math.trunc(number*100)/100

I used 100 because you want to truncate to the second digit, but a more flexible solution would be :

number = Math.trunc(number*Math.pow(10, digits))/Math.pow(10, digits)

where digits is the amount of decimal digits to keep.

See Math.trunc specs for details and browser compatibility.

Solution 5 - Javascript

Update (Jan 2021)

Depending on its range, a number in javascript may be shown in scientific notation. For example, if you type 0.0000001 in the console, you may see it as 1e-7, whereas 0.000001 appears unchanged (0.000001). If your application works on a range of numbers for which scientific notation is not involved, you can just ignore this update and use the original answer below.

This update is about adding a function that checks if the number is in scientific format and, if so, converts it into decimal format. Here I'm proposing this one, but you can use any other function that achieves the same goal, according to your application's needs:

function toFixed(x) {
  if (Math.abs(x) < 1.0) {
    let e = parseInt(x.toString().split('e-')[1]);
    if (e) {
        x *= Math.pow(10,e-1);
        x = '0.' + (new Array(e)).join('0') + x.toString().substring(2);
    }
  } else {
    let e = parseInt(x.toString().split('+')[1]);
    if (e > 20) {
        e -= 20;
        x /= Math.pow(10,e);
        x += (new Array(e+1)).join('0');
    }
  }
  return x;
}

Now just apply that function to the parameter (that's the only change with respect to the original answer):

function toFixedTrunc(x, n) {
      x = toFixed(x) 

      // From here on the code is the same than the original answer
      const v = (typeof x === 'string' ? x : x.toString()).split('.');
      if (n <= 0) return v[0];
      let f = v[1] || '';
      if (f.length > n) return `${v[0]}.${f.substr(0,n)}`;
      while (f.length < n) f += '0';
      return `${v[0]}.${f}`
    }

This updated version addresses also a case mentioned in a comment:

toFixedTrunc(0.000000199, 2) => "0.00" 

Again, choose what fits your application needs at best.

Original answer (October 2017)

General solution to truncate (no rounding) a number to the n-th decimal digit and convert it to a string with exactly n decimal digits, for any n≥0.

function toFixedTrunc(x, n) {
  const v = (typeof x === 'string' ? x : x.toString()).split('.');
  if (n <= 0) return v[0];
  let f = v[1] || '';
  if (f.length > n) return `${v[0]}.${f.substr(0,n)}`;
  while (f.length < n) f += '0';
  return `${v[0]}.${f}`
}

where x can be either a number (which gets converted into a string) or a string.

Here are some tests for n=2 (including the one requested by OP):

0 		    => 0.00
0.01 		=> 0.01
0.5839 	    => 0.58
0.999 	    => 0.99
1.01 		=> 1.01
2 		    => 2.00
2.551 	    => 2.55
2.99999     => 2.99
4.27 		=> 4.27
15.7784514  => 15.77
123.5999 	=> 123.59

And for some other values of n:

15.001097   => 15.0010 (n=4)
0.000003298 => 0.0000032 (n=7)
0.000003298257899 => 0.000003298257 (n=12)

Solution 6 - Javascript

parseInt is faster then Math.floor

function floorFigure(figure, decimals){
	if (!decimals) decimals = 2;
	var d = Math.pow(10,decimals);
	return (parseInt(figure*d)/d).toFixed(decimals);
};

floorFigure(123.5999)    =>   "123.59"
floorFigure(123.5999, 3) =>   "123.599"

Solution 7 - Javascript

num = 19.66752
f = num.toFixed(3).slice(0,-1)
alert(f)

This will return 19.66

Solution 8 - Javascript

This is not a safe alternative, as many others commented examples with numbers that turn into exponential notation, that scenery is not covered by this function

// typescript
// function formatLimitDecimals(value: number, decimals: number): number {

function formatLimitDecimals(value, decimals) { 
  const stringValue = value.toString();
  if(stringValue.includes('e')) {
      // TODO: remove exponential notation
      throw 'invald number';
  } else {
    const [integerPart, decimalPart] = stringValue.split('.');
    if(decimalPart) {
      return +[integerPart, decimalPart.slice(0, decimals)].join('.')
    } else {
      return integerPart;
    }
  }
}

console.log(formatLimitDecimals(4.156, 2)); // 4.15
console.log(formatLimitDecimals(4.156, 8)); // 4.156
console.log(formatLimitDecimals(4.156, 0)); // 4
console.log(formatLimitDecimals(0, 4)); // 0

// not covered
console.log(formatLimitDecimals(0.000000199, 2)); // 0.00

Solution 9 - Javascript

Simple do this

number = parseInt(number * 100)/100;

Solution 10 - Javascript

Just truncate the digits:

function truncDigits(inputNumber, digits) {
  const fact = 10 ** digits;
  return Math.floor(inputNumber * fact) / fact;
}

Solution 11 - Javascript

My version for positive numbers:

function toFixed_norounding(n,p)
{
	var result = n.toFixed(p);
	return result <= n ? result: (result - Math.pow(0.1,p)).toFixed(p);
}

Fast, pretty, obvious. (version for positive numbers)

Solution 12 - Javascript

I fixed using following simple way-

var num = 15.7784514;
Math.floor(num*100)/100;

Results will be 15.77

Solution 13 - Javascript

These solutions do work, but to me seem unnecessarily complicated. I personally like to use the modulus operator to obtain the remainder of a division operation, and remove that. Assuming that num = 15.7784514:

num-=num%.01;

This is equivalent to saying num = num - (num % .01).

Solution 14 - Javascript

The answers here didn't help me, it kept rounding up or giving me the wrong decimal.

my solution converts your decimal to a string, extracts the characters and then returns the whole thing as a number.

function Dec2(num) {
  num = String(num);
  if(num.indexOf('.') !== -1) {
    var numarr = num.split(".");
    if (numarr.length == 1) {
      return Number(num);
    }
    else {
      return Number(numarr[0]+"."+numarr[1].charAt(0)+numarr[1].charAt(1));
    }
  }
  else {
    return Number(num);
  }  
}

Dec2(99); // 99
Dec2(99.9999999); // 99.99
Dec2(99.35154); // 99.35
Dec2(99.8); // 99.8
Dec2(10265.985475); // 10265.98

Solution 15 - Javascript

The following code works very good for me:

num.toString().match(/.\*\\..{0,2}|.\*/)[0];

Solution 16 - Javascript

An Easy way to do it is the next but is necessary ensure that the amount parameter is given as a string.

function truncate(amountAsString, decimals = 2){
  var dotIndex = amountAsString.indexOf('.');
  var toTruncate = dotIndex !== -1  && ( amountAsString.length > dotIndex + decimals + 1);
  var approach = Math.pow(10, decimals);
  var amountToTruncate = toTruncate ? amountAsString.slice(0, dotIndex + decimals +1) : amountAsString;  
  return toTruncate
    ?  Math.floor(parseFloat(amountToTruncate) * approach ) / approach
    :  parseFloat(amountAsString);

}

console.log(truncate("7.99999")); //OUTPUT ==> 7.99
console.log(truncate("7.99999", 3)); //OUTPUT ==> 7.999
console.log(truncate("12.799999999999999")); //OUTPUT ==> 7.99

Solution 17 - Javascript

This worked well for me. I hope it will fix your issues too.

function toFixedNumber(number) {
    const spitedValues = String(number.toLocaleString()).split('.');
    let decimalValue = spitedValues.length > 1 ? spitedValues[1] : '';
    decimalValue = decimalValue.concat('00').substr(0,2);

    return '$'+spitedValues[0] + '.' + decimalValue;
}

// 5.56789      ---->  $5.56
// 0.342        ---->  $0.34
// -10.3484534  ---->  $-10.34 
// 600          ---->  $600.00

function convertNumber(){
  var result = toFixedNumber(document.getElementById("valueText").value);
  document.getElementById("resultText").value = result;
}


function toFixedNumber(number) {
        const spitedValues = String(number.toLocaleString()).split('.');
        let decimalValue = spitedValues.length > 1 ? spitedValues[1] : '';
        decimalValue = decimalValue.concat('00').substr(0,2);

        return '$'+spitedValues[0] + '.' + decimalValue;

}

<div>
  <input type="text" id="valueText" placeholder="Input value here..">
  <br>
  <button onclick="convertNumber()" >Convert</button>
  <br><hr>
  <input type="text" id="resultText" placeholder="result" readonly="true">
</div>

Solution 18 - Javascript

Here you are. An answer that shows yet another way to solve the problem:

// For the sake of simplicity, here is a complete function:
function truncate(numToBeTruncated, numOfDecimals) {
    var theNumber = numToBeTruncated.toString();
	var pointIndex = theNumber.indexOf('.');
    return +(theNumber.slice(0, pointIndex > -1 ? ++numOfDecimals + pointIndex : undefined));
}

Note the use of + before the final expression. That is to convert our truncated, sliced string back to number type.

Hope it helps!

Solution 19 - Javascript

truncate without zeroes

function toTrunc(value,n){	
	return Math.floor(value*Math.pow(10,n))/(Math.pow(10,n));
}

or

function toTrunc(value,n){
	x=(value.toString()+".0").split(".");
	return parseFloat(x[0]+"."+x[1].substr(0,n));
}

test:

toTrunc(17.4532,2) 	//17.45
toTrunc(177.4532,1) //177.4
toTrunc(1.4532,1) 	//1.4
toTrunc(.4,2) 		//0.4

truncate with zeroes

function toTruncFixed(value,n){
	return toTrunc(value,n).toFixed(n);
}

test:

toTrunc(17.4532,2) 	//17.45
toTrunc(177.4532,1) //177.4
toTrunc(1.4532,1) 	//1.4
toTrunc(.4,2) 		//0.40

Solution 20 - Javascript

If you exactly wanted to truncate to 2 digits of precision, you can go with a simple logic:

function myFunction(number) {
  var roundedNumber = number.toFixed(2);
  if (roundedNumber > number)
  {
      roundedNumber = roundedNumber - 0.01;
  }
  return roundedNumber;
}

Solution 21 - Javascript

I used (num-0.05).toFixed(1) to get the second decimal floored.

Solution 22 - Javascript

My solution in typescript (can easily be ported to JS):

/**
 * Returns the price with correct precision as a string
 *
 * @param   price The price in decimal to be formatted.
 * @param   decimalPlaces The number of decimal places to use
 * @return  string The price in Decimal formatting.
 */
type toDecimal = (price: number, decimalPlaces?: number) => string;
const toDecimalOdds: toDecimal = (
  price: number,
  decimalPlaces: number = 2,
): string => {
  const priceString: string = price.toString();
  const pointIndex: number = priceString.indexOf('.');

  // Return the integer part if decimalPlaces is 0
  if (decimalPlaces === 0) {
    return priceString.substr(0, pointIndex);
  }

  // Return value with 0s appended after decimal if the price is an integer
  if (pointIndex === -1) {
    const padZeroString: string = '0'.repeat(decimalPlaces);

    return `${priceString}.${padZeroString}`;
  }

  // If numbers after decimal are less than decimalPlaces, append with 0s
  const padZeroLen: number = priceString.length - pointIndex - 1;
  if (padZeroLen > 0 && padZeroLen < decimalPlaces) {
    const padZeroString: string = '0'.repeat(padZeroLen);

    return `${priceString}${padZeroString}`;
  }

  return priceString.substr(0, pointIndex + decimalPlaces + 1);
};

Test cases:

  expect(filters.toDecimalOdds(3.14159)).toBe('3.14');
  expect(filters.toDecimalOdds(3.14159, 2)).toBe('3.14');
  expect(filters.toDecimalOdds(3.14159, 0)).toBe('3');
  expect(filters.toDecimalOdds(3.14159, 10)).toBe('3.1415900000');
  expect(filters.toDecimalOdds(8.2)).toBe('8.20');

Any improvements?

Solution 23 - Javascript

Roll your own toFixed function: for positive values Math.floor works fine.

function toFixed(num, fixed) {
    fixed = fixed || 0;
    fixed = Math.pow(10, fixed);
    return Math.floor(num * fixed) / fixed;
}

For negative values Math.floor is round of the values. So you can use Math.ceil instead.

Example,

Math.ceil(-15.778665 * 10000) / 10000 = -15.7786
Math.floor(-15.778665 * 10000) / 10000 = -15.7787 // wrong.

Solution 24 - Javascript

Gumbo's second solution, with the regular expression, does work but is slow because of the regular expression. Gumbo's first solution fails in certain situations due to imprecision in floating points numbers. See the JSFiddle for a demonstration and a benchmark. The second solution takes about 1636 nanoseconds per call on my current system, Intel Core i5-2500 CPU at 3.30 GHz.

The solution I've written involves adding a small compensation to take care of floating point imprecision. It is basically instantaneous, i.e. on the order of nanoseconds. I clocked 2 nanoseconds per call but the JavaScript timers are not very precise or granular. Here is the [JS Fiddle][2] and the code.

function toFixedWithoutRounding (value, precision)
{
    var factorError = Math.pow(10, 14);
    var factorTruncate = Math.pow(10, 14 - precision);
    var factorDecimal = Math.pow(10, precision);
    return Math.floor(Math.floor(value * factorError + 1) / factorTruncate) / factorDecimal;
}

var values = [1.1299999999, 1.13, 1.139999999, 1.14, 1.14000000001, 1.13 * 100];

for (var i = 0; i < values.length; i++)
{
    var value = values[i];
    console.log(value + " --> " + toFixedWithoutRounding(value, 2));
}

for (var i = 0; i < values.length; i++)
{
    var value = values[i];
    console.log(value + " --> " + toFixedWithoutRounding(value, 4));
}

console.log("type of result is " + typeof toFixedWithoutRounding(1.13 * 100 / 100, 2));

// Benchmark
var value = 1.13 * 100;
var startTime = new Date();
var numRun = 1000000;
var nanosecondsPerMilliseconds = 1000000;

for (var run = 0; run < numRun; run++)
    toFixedWithoutRounding(value, 2);

var endTime = new Date();
var timeDiffNs = nanosecondsPerMilliseconds * (endTime - startTime);
var timePerCallNs = timeDiffNs / numRun;
console.log("Time per call (nanoseconds): " + timePerCallNs);

[2]: http://jsfiddle.net/sQXdE/17/ "JS Fiddle"

Solution 25 - Javascript

Already there are some suitable answer with regular expression and arithmetic calculation, you can also try this

function myFunction() {
    var str = 12.234556; 
    str = str.toString().split('.');
    var res = str[1].slice(0, 2);
    document.getElementById("demo").innerHTML = str[0]+'.'+res;
}
    
// output: 12.23

Solution 26 - Javascript

Building on David D's answer:

function NumberFormat(num,n) {
  var num = (arguments[0] != null) ? arguments[0] : 0;
  var n = (arguments[1] != null) ? arguments[1] : 2;
  if(num > 0){
	num = String(num);
	if(num.indexOf('.') !== -1) {
	  var numarr = num.split(".");
	  if (numarr.length > 1) {
		if(n > 0){
		  var temp = numarr[0] + ".";
		  for(var i = 0; i < n; i++){
			if(i < numarr[1].length){
			  temp += numarr[1].charAt(i);
			}
		  }
		  num = Number(temp);
		}
	  }
	}
  }
  return Number(num);
}

console.log('NumberFormat(123.85,2)',NumberFormat(123.85,2));
console.log('NumberFormat(123.851,2)',NumberFormat(123.851,2));
console.log('NumberFormat(0.85,2)',NumberFormat(0.85,2));
console.log('NumberFormat(0.851,2)',NumberFormat(0.851,2));
console.log('NumberFormat(0.85156,2)',NumberFormat(0.85156,2));
console.log('NumberFormat(0.85156,4)',NumberFormat(0.85156,4));
console.log('NumberFormat(0.85156,8)',NumberFormat(0.85156,8));
console.log('NumberFormat(".85156",2)',NumberFormat(".85156",2));
console.log('NumberFormat("0.85156",2)',NumberFormat("0.85156",2));
console.log('NumberFormat("1005.85156",2)',NumberFormat("1005.85156",2));
console.log('NumberFormat("0",2)',NumberFormat("0",2));
console.log('NumberFormat("",2)',NumberFormat("",2));
console.log('NumberFormat(85156,8)',NumberFormat(85156,8));
console.log('NumberFormat("85156",2)',NumberFormat("85156",2));
console.log('NumberFormat("85156.",2)',NumberFormat("85156.",2));

// NumberFormat(123.85,2) 123.85
// NumberFormat(123.851,2) 123.85
// NumberFormat(0.85,2) 0.85
// NumberFormat(0.851,2) 0.85
// NumberFormat(0.85156,2) 0.85
// NumberFormat(0.85156,4) 0.8515
// NumberFormat(0.85156,8) 0.85156
// NumberFormat(".85156",2) 0.85
// NumberFormat("0.85156",2) 0.85
// NumberFormat("1005.85156",2) 1005.85
// NumberFormat("0",2) 0
// NumberFormat("",2) 0
// NumberFormat(85156,8) 85156
// NumberFormat("85156",2) 85156
// NumberFormat("85156.",2) 85156

Solution 27 - Javascript

It's more reliable to get two floating points without rounding.

Reference Answer

var number = 10.5859;
var fixed2FloatPoints = parseInt(number * 100) / 100;
console.log(fixed2FloatPoints);

Thank You !

Solution 28 - Javascript

Here is what is did it with string

export function withoutRange(number) {
  const str = String(number);
  const dotPosition = str.indexOf('.');
  if (dotPosition > 0) {
    const length = str.substring().length;
    const end = length > 3 ? 3 : length;
    return str.substring(0, dotPosition + end);
  }
  return str;
}

Solution 29 - Javascript

All these answers seem a bit complicated. I would just subtract 0.5 from your number and use toFixed().

Solution 30 - Javascript

Another solution, that truncates and round:

function round (number, decimals, truncate) {
	if (truncate) {
		number = number.toFixed(decimals + 1);
		return parseFloat(number.slice(0, -1));
	}
	
	var n = Math.pow(10.0, decimals);
	return Math.round(number * n) / n;
};

Solution 31 - Javascript

Taking the knowledge from all the previous answers combined,

this is what I came up with as a solution:

function toFixedWithoutRounding(num, fractionDigits) {
  if ((num > 0 && num < 0.000001) || (num < 0 && num > -0.000001)) {
    // HACK: below this js starts to turn numbers into exponential form like 1e-7.
    // This gives wrong results so we are just changing the original number to 0 here
    // as we don't need such small numbers anyway.
    num = 0;
  }
  const re = new RegExp('^-?\\d+(?:\.\\d{0,' + (fractionDigits || -1) + '})?');
  return Number(num.toString().match(re)[0]).toFixed(fractionDigits);
}

Solution 32 - Javascript

function toFixed(num, fixed) {
    fixed = fixed || 0;
    var front = Math.floor(num);
    var back = 0;
    for (var i = 1; i <= fixed; i++) {
        var value = Math.floor(num * Math.pow(10, i)) % 10;
        back += value / Math.pow(10, i);
    }
    return front + back;
}

Solution 33 - Javascript

UPDATED JUNE 2021

this will fix any number with the given length without rounding

let FixWithoutRounding = (v, l) => {
      const intPart = Math.trunc(v).toString()
      const fractionPart = v.toString().slice(v.toString().indexOf('.') + 1)
      if (fractionPart.length > l) {
        return Number(intPart.concat('.', fractionPart.slice(0, l)))
      } else {
        const padded = intPart.concat('.', fractionPart.padEnd(l, '0'))
        return padded
      }
    }

console.log(FixWithoutRounding(123.123, 12))

Solution 34 - Javascript

The most efficient solution (for 2 fraction digits) is to subtract 0.005 before calling toFixed()

function toFixed2( num ) { return (num-0.005).toFixed(2) }

Negative numbers will be rounded down too (away from zero). The OP didn't tell anything about negative numbers.

Solution 35 - Javascript

I know there are already few working examples, but I think it's worth to propose my String.toFixed equivalent, some may find it helpful.

That's my toFixed alternative, that don't round numbers, just truncates it or adds zeroes according to given precision. For extra long number it uses JS build-in rounding when precision is to long. Function works for all problematic number I've found on stack.

function toFixedFixed(value, precision = 0) {
    let stringValue = isNaN(+value) ? '0' : String(+value);

    if (stringValue.indexOf('e') > -1 || stringValue === 'Infinity' || stringValue === '-Infinity') {
        throw new Error('To large number to be processed');
    }

    let [ beforePoint, afterPoint ] = stringValue.indexOf('.') > -1 ? stringValue.split('.') : [ stringValue, ''];
    
    // Force automatic rounding for some long real numbers that ends with 99X, by converting it to string, cutting off last digit, then adding extra nines and casting it on number again
    // e.g. 2.0199999999999996: +('2.019999999999999' + '9999') will give 2.02
    if (stringValue.length >= 17 && afterPoint.length > 2 && +afterPoint.substr(afterPoint.length - 3) > 995) {
        stringValue = String(+(stringValue.substr(0, afterPoint.length - 1) + '9'.repeat(stringValue.split('.').shift().length + 4)));
        [ beforePoint, afterPoint ] = String(stringValue).indexOf('.') > -1 ? stringValue.split('.') : [ stringValue, ''];
    }

    if (precision === 0) {
        return beforePoint;
    } else if (afterPoint.length > precision) {
        return `${beforePoint}.${afterPoint.substr(0, precision)}`;
    } else {
        return `${beforePoint}.${afterPoint}${'0'.repeat(precision - afterPoint.length)}`;
    }
}

Keep in mind that precision may not be handled properly for numbers of length 18 and greater, e.g. 64-bit Chrome will round it or add "e+" / "e-" to keep number's length at 18.

If you want to perform operations on real numbers it's safer to multiply it by Math.sqrt(10, precision) first, make the calculations, then dive result by multiplier's value.

Example: > 0.06 + 0.01 is 0.06999999999999999, and every formatting function > that's not rounding will truncate it to 0.06 for precision 2. > > But if you'll perform same operation with multiplier÷r: (0.06 * 100 + 0.01 * 100) / 100, you'll get 0.07.

That's why it's so important to use such multiplier/divider when dealing with real numbers in javascript, especially when you're calculating money...

Solution 36 - Javascript

const toFixed = (value) => value.toString().slice(0,5);

Solution 37 - Javascript

a simple solution

const toFixedNoRounding = (value, digits) => {
  const factor = Math.pow(10, digits);

  return Math.trunc(value * factor) / factor;
};

Solution 38 - Javascript

In order to collaborate, there is a solution that I had to use with Bitcoin math operations. The point is that Bitcoin uses 8 decimal numbers, and we needed no round.

So, I did this:

  • do the calculation;

  • take the value and set 9 decimal houses

    value = value.toFixed(9);

-take the substring cutting off the last decimal number:

value = value.substring(0, value.length - 1);

No. This is not elegant, but it's a solution.

Solution 39 - Javascript

Thanks Martin Varmus

function floorFigure(figure, decimals){
     if (!decimals) decimals = 2;
     var d = Math.pow(10,decimals);
     return ((figure*d)/d).toFixed(decimals);
};

floorFigure(123.5999)    =>   "123.59"
floorFigure(123.5999, 3) =>   "123.599"

I make a simple update and I got proper rounding. The update is following line

return ((figure*d)/d).toFixed(decimals);

remove parseInt() function

Solution 40 - Javascript

Here is another one variant to save .toFixed([digits]) functional without rounding float variable:

Number.prototype.toRealFixed = function(digits) {
    return Math.floor(this.valueOf() * Math.pow(10, digits)) / Math.pow(10, digits);
};

And calling:

var float_var = 0.02209062;
float_var.toRealFixed();

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestiontempidView Question on Stackoverflow
Solution 1 - JavascriptGumboView Answer on Stackoverflow
Solution 2 - JavascriptguyaView Answer on Stackoverflow
Solution 3 - JavascriptベンノスケView Answer on Stackoverflow
Solution 4 - JavascriptremidejView Answer on Stackoverflow
Solution 5 - JavascriptSC1000View Answer on Stackoverflow
Solution 6 - JavascriptMartin VarmusView Answer on Stackoverflow
Solution 7 - JavascriptAlex PengView Answer on Stackoverflow
Solution 8 - JavascriptRuben Morales FelixView Answer on Stackoverflow
Solution 9 - JavascriptImran PollobView Answer on Stackoverflow
Solution 10 - JavascriptAral RocaView Answer on Stackoverflow
Solution 11 - JavascriptAlpha and OmegaView Answer on Stackoverflow
Solution 12 - JavascriptomsView Answer on Stackoverflow
Solution 13 - JavascriptjtrickView Answer on Stackoverflow
Solution 14 - JavascriptDavid DView Answer on Stackoverflow
Solution 15 - JavascriptMISSIRIAView Answer on Stackoverflow
Solution 16 - JavascriptFelipe SantaView Answer on Stackoverflow
Solution 17 - JavascriptSandaruView Answer on Stackoverflow
Solution 18 - JavascriptJakub BarczykView Answer on Stackoverflow
Solution 19 - JavascriptShAkKiRView Answer on Stackoverflow
Solution 20 - JavascriptDeepakView Answer on Stackoverflow
Solution 21 - Javascript王景飞View Answer on Stackoverflow
Solution 22 - JavascriptVPaulView Answer on Stackoverflow
Solution 23 - JavascriptBoopathi SakthivelView Answer on Stackoverflow
Solution 24 - JavascriptDaniel BarbalaceView Answer on Stackoverflow
Solution 25 - JavascriptANIK ISLAM SHOJIBView Answer on Stackoverflow
Solution 26 - JavascriptCharles RobertsonView Answer on Stackoverflow
Solution 27 - JavascriptJaydeep MorView Answer on Stackoverflow
Solution 28 - JavascriptKishan VaghelaView Answer on Stackoverflow
Solution 29 - JavascriptSean MayesView Answer on Stackoverflow
Solution 30 - JavascriptBeto NetoView Answer on Stackoverflow
Solution 31 - JavascriptpatotomaView Answer on Stackoverflow
Solution 32 - JavascriptTerry TanView Answer on Stackoverflow
Solution 33 - JavascriptArslanView Answer on Stackoverflow
Solution 34 - JavascriptWiimmView Answer on Stackoverflow
Solution 35 - JavascriptMagyaDEVView Answer on Stackoverflow
Solution 36 - JavascriptArtem BochkarevView Answer on Stackoverflow
Solution 37 - JavascriptLah EzcenView Answer on Stackoverflow
Solution 38 - JavascriptMichel FernandesView Answer on Stackoverflow
Solution 39 - JavascriptJakir Hosen KhanView Answer on Stackoverflow
Solution 40 - JavascriptAlexxKurView Answer on Stackoverflow