Add .00 (toFixed) only if number has less than two decimal places

匆匆过客 提交于 2020-01-31 06:18:55

问题


I need to add zeroes, so that each number has at least two decimals, but without rounding. So for example:

5      --> 5.00
5.1    --> 5.10
5.11   --> 5.11 (no change)
5.111  --> 5.111 (no change)
5.1111 -->  5.1111  (no change) 

My function is missing an IF to check for less than two decimal places:

function addZeroes( num ) {
   var num = Number(num);
   if ( //idk ) {
      num = num.toFixed(2);
   }
   return num;
}

Thanks!

Posting an alternative answer, in addition to the two below. (Keep in mind that I'm no expert and this is just for text inputs, not for parsing complex values like colors that could have floating point issues, etc.)

function addZeroes( value ) {
    //set everything to at least two decimals; removs 3+ zero decimasl, keep non-zero decimals
    var new_value = value*1; //removes trailing zeros
    new_value = new_value+''; //casts it to string

    pos = new_value.indexOf('.');
    if (pos==-1) new_value = new_value + '.00';
    else {
        var integer = new_value.substring(0,pos);
        var decimals = new_value.substring(pos+1);
        while(decimals.length<2) decimals=decimals+'0';
        new_value = integer+'.'+decimals;
    }
    return new_value;
}

[This is not a duplicate question. The question you linked assumes "knowing that they have at least 1 decimal." Decimal points cannot be assumed in text inputs, and this was making errors.]


回答1:


Here you go:

function addZeroes(num) {
// Convert input string to a number and store as a variable.
    var value = Number(num);      
// Split the input string into two arrays containing integers/decimals
    var res = num.split(".");     
// If there is no decimal point or only one decimal place found.
    if(res.length == 1 || res[1].length < 3) { 
// Set the number to two decimal places
        value = value.toFixed(2);
    }
// Return updated or original number.
return value;
}

// If you require the number as a string simply cast back as so
var num = String(value);

See updated fiddle for demonstration.

http://jsfiddle.net/jhKuk/159/




回答2:


The below code provides one way to do what you want. There are others.

function addZeroes(num) {
    // Cast as number
    var num = Number(num);
    // If not a number, return 0
    if (isNaN(num)) {
        return 0;
    }
    // If there is no decimal, or the decimal is less than 2 digits, toFixed
    if (String(num).split(".").length < 2 || String(num).split(".")[1].length<=2 ){
        num = num.toFixed(2);
    }
    // Return the number
    return num;
}

console.log(addZeroes(5)); // Alerts 5.00
console.log(addZeroes(5.1)); // Alerts 5.10
console.log(addZeroes(5.11)); // Alerts 5.11
console.log(addZeroes(5.111)); // Alerts 5.111

http://jsfiddle.net/nzK4n/




回答3:


Maybe use .toLocaleString():

var num = 5.1;    
var numWithZeroes = num.toLocaleString("en",{useGrouping: false,minimumFractionDigits: 2});
console.log(numWithZeroes);

As a function/demo:

function addZeroes(num) {
   return num.toLocaleString("en", {useGrouping: false, minimumFractionDigits: 2})
}

console.log('before   after       correct');
console.log('5      ->', addZeroes(5) , '  --> 5.00');
console.log('5.1    ->', addZeroes(5.1) , '  --> 5.10');
console.log('5.11   ->', addZeroes(5.11) , '  --> 5.11 (no change)');
console.log('5.111  ->', addZeroes(5.111) , ' --> 5.111 (no change)');
console.log('5.1111 ->', addZeroes(5.1111) , '--> 5.1111 (no change)');
console.log('-5     ->', addZeroes(-5) , ' --> -5.00');

And if you must use .toFixed(), here's a one-liner:

var num = 5.1;    
var numWithZeroes = num.toFixed(Math.max(((num+'').split(".")[1]||"").length, 2));
console.log(numWithZeroes);

Or, again, as a function/demo:

function addZeroes(num) {
   return num.toFixed(Math.max(((num+'').split(".")[1]||"").length, 2));
}

console.log('before   after       correct');
console.log('5      ->', addZeroes(5) , '  --> 5.00');
console.log('5.1    ->', addZeroes(5.1) , '  --> 5.10');
console.log('5.11   ->', addZeroes(5.11) , '  --> 5.11 (no change)');
console.log('5.111  ->', addZeroes(5.111) , ' --> 5.111 (no change)');
console.log('5.1111 ->', addZeroes(5.1111) , '--> 5.1111 (no change)');
console.log('-5     ->', addZeroes(-5) , ' --> -5.00');



回答4:


decimalNumber = number => Number.isInteger(number) ? number.toFixed(2) : number



回答5:


Here is a function that will do this, function expects a number

var addZeroes = function(num) {
  var numberAsString = num.toString();

  if(numberAsString.indexOf('.') === -1) {
    num = num.toFixed(2);
    numberAsString = num.toString();
  } else if (numberAsString.split(".")[1].length < 3) {
    num = num.toFixed(2);
    numberAsString = num.toString();
  }

  return numberAsString
};



回答6:


For number type textbox

Append .00 if number present

function addZeroes(ev) {
    debugger;
    // Convert input string to a number and store as a variable.
    var value = Number(ev.value);
    // Split the input string into two arrays containing integers/decimals
    var res = ev.value.split(".");
    // If there is no decimal point or only one decimal place found.
    if (res.length == 1 || res[1].length < 3) {
        // Set the number to two decimal places
        value = value.toFixed(2);
    }
    // Return updated or original number.
    if (ev.value != "") {
        ev.value = String(value);
    }
}
<input type="number" step=".01" onchange="addZeroes(this)" />


来源:https://stackoverflow.com/questions/24038971/add-00-tofixed-only-if-number-has-less-than-two-decimal-places

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