仅当数字小于两位小数时才添加.00(toFixed)

时间:2014-06-04 13:36:18

标签: javascript number-formatting

我需要添加零,这样每个数字至少有两位小数,但没有舍入。例如:

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) 

我的函数缺少一个IF来检查少于两个小数位:

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

谢谢!

除了以下两个之外,还要发布替代答案。 (请记住,我不是专家,这只是用于文本输入,而不是用于解析复杂值,例如可能存在浮点问题的颜色等)。

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

[这不是一个重复的问题。您链接的问题假设&#34;知道它们至少有1个小数。&#34;在文本输入中不能假设小数点,这就是错误。]

10 个答案:

答案 0 :(得分:25)

你走了:

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/

答案 1 :(得分:11)

以下代码提供了一种方法来执行您想要的操作。还有其他人。

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

答案 2 :(得分:4)

也许使用.toLocaleString()

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

作为一个功能/演示:

&#13;
&#13;
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');
&#13;
&#13;
&#13;

如果你必须使用.toFixed(),这里就是一个单行:

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

或者,再次,作为一个函数/演示:

&#13;
&#13;
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');
&#13;
&#13;
&#13;

答案 3 :(得分:0)

这是一个执行此操作的函数,函数需要一个数字

<MapView
        followUserLocation
        initialRegion={region}
        ref={(ref) => { this.mapRef = ref; }}
        showsUserLocation
        style={styles.map}
        onRegionChange={this.onRegionChange.bind(this)}
/>

答案 4 :(得分:0)

对于数字类型文本框

如果有数字,则附加.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)" />

答案 5 :(得分:0)

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

答案 6 :(得分:0)

对于什么是值得的,这是我的递归解决方案:

const addZeros = (decimal, value, check = true) => {
  if (check && decimal <= value.length) return value;
  if (decimal <= 0) return value;
  const newValue = value.length <= decimal ? '0' + value : value;
  return addZeros(decimal - 1, newValue, false);
};
  • decimal 是你想要的小数位数
  • value 是您想要的值
  • check 不应该被设置,它是为了防止在第一次调用时出现一些问题。

例如:

  • addZeros(3, "3") ==> "003"
  • addZeros(3, "30") ==> "030"
  • addZeros(3, "300") ==> "300"
  • addZeros(3, "3000") ==> "3000"

答案 7 :(得分:0)

我们可以使用 angular 的管道来解决这个问题。我们将把数字信息参数传递给十进制管道,看看它是如何工作的 -

数字信息参数(3.2-5):

{{ decimal_value | number:'3.2-5' }}

在上面的代码中,我们指示十进制管道在小数点前显示至少 3 个整数值,最小 2 个小数位,最大 5 个小数位。

if decimal_value = 5.123 then it will print 005.12300
if decimal_value = 53.1 then it will print  053.10

答案 8 :(得分:0)

此解决方案检查数字是否固定

decimalNumber = number => Number.isInteger(number) && number % 1 === 0 ? number : number.toFixed(4);

答案 9 :(得分:0)

为我工作 - 让 a = 12 console.log(a.toLocaleString("en", {u​​seGrouping: false, minimumFractionDigits: 2})) 输出 - 12.00