web-dev-qa-db-ja.com

数値が小数点以下2桁未満の場合にのみ.00(修正済み)を追加します

ゼロを追加する必要があります。そのため、各数値には少なくとも2つの小数点がありますが、丸めはありません。たとえば、次のとおりです。

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) 

私の関数には、小数点以下2桁未満をチェックするIFがありません。

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

ありがとう!

以下の2つに加えて、別の回答を投稿します。 (私は専門家ではなく、これは単なるテキスト入力用であり、浮動小数点の問題などが発生する可能性のある色のような複雑な値の解析用ではないことに注意してください)

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;
}

[これは重複した質問ではありません。リンクした質問は、「小数点以下が少なくとも1つあることを知っている」ことを前提としています。テキスト入力では小数点は想定できないため、エラーが発生していました。]

17

どうぞ:

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);

デモ用の更新されたフィドルを参照してください。

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

26
Fergmux

以下のコードは、必要なことを行う1つの方法を提供します。他にもあります。

function addZeroes( num ) {
   // Cast as number
   var num = Number(num);
   // If not a number, return 0
   if (isNaN) {
        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;
}

http://jsfiddle.net/nzK4n/

alert(addZeroes(5)); // Alerts 5.00
alert(addZeroes(5.1)); // Alerts 5.10
alert(addZeroes(5.11)); // Alerts 5.11
alert(addZeroes(5.111)); // Alerts 5.111
11
cale_b

多分 .toLocaleString()

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

関数/デモとして:

_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');_

また、.toFixed()を使用する必要がある場合は、1行のライナーを使用します。

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

または、再び、関数/デモとして:

_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');_
8
acdcjunior

数値型テキストボックスの場合

番号が存在する場合は.00を追加します

_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)" />
0
Arun Prasad E S

これはこれを行う関数です、関数は数値を期待しています

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
};
0
Paul T
decimalNumber = number => Number.isInteger(number) ? number.toFixed(2) : number
0
Alina S