【问题标题】:Trying to prepend leading zero and decimal to number Javascript尝试将前导零和小数添加到数字Javascript
【发布时间】:2019-11-25 13:13:19
【问题描述】:

我在尝试在 Javascript 中添加前导零和小数同时保持数字格式时遇到了一些麻烦。我能够以字符串的形式成功执行此操作,但是当尝试使用 parseInt() 时,它会去除前导零和小数并转换为整数。

我要达到的最终目标如下:

  1. 0.5000
  2. 0.0500

而且,如果给出的数字更少:

  1. 0.50
  2. 0.05

我有一个函数,它接受一个数字和一个可选的布尔值来确定是否执行上述操作,使用 JS 开关:

function formatTrainingDigit(number, decimals) {
  var numberSplit = number.toString().split('')
  if (decimals) {
    switch (numberSplit.length) {
      case 1:
        return '0.0' + number // TODO: this returns string, change to number.
        break;
      case 2:
        return '0.' + number // TODO: this returns string, change to number.
        break;
      case 3:
        return '0.' + number // TODO: this returns string, change to number.
        break;
      case 4:
        return '0.' + number // TODO: this returns string, change to number.
        break;
      default:
        return 0.00
    }
  } else {
    switch (numberSplit.length) {
      case 1:
        return 0,0,0,parseInt(numberSplit[0])
        break;
      case 2:
        return 0,0,parseInt(numberSplit[0]),parseInt(numberSplit[1])
        break;
      case 3:
        return 0,parseInt(numberSplit[0]),parseInt(numberSplit[1]),parseInt(numberSplit[2])
        break;
      case 4:
        return parseInt(numberSplit[0]),parseInt(numberSplit[1]),parseInt(numberSplit[2]),parseInt(numberSplit[3])
        break;
      default:
        return 0,0,0,0
    }
  }
}

我会将值传递给函数:formatTrainingDigit(5000, false)formatTrainingDigit(50, true)

但是,当尝试对我返回的函数执行 parseInt() 时,它会删除所有内容,例如:

这有效:console.log(formatTrainingDigit(5000, true)) // returns string 这失败了:console.log(parseInt(formatTrainingDigit(5000, true))) // returns number zero

【问题讨论】:

  • 为什么不使用Number.prototype.toFixed
  • 如果您需要浮点/十进制值,为什么要使用parseInt?你试过用parseFloat吗?
  • parseFloat() 也会去除多余的前导零。
  • @MaheerAli 这给了我5000.00 我在使用developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/… 时需要0.5000

标签: javascript jquery node.js function


【解决方案1】:

您可以使用 toFixed 的数字方法。下面是一个例子。

function addZeroes( num ) {
   var value;
    var res;
    if(typeof num== "number")
       {
         value = (num);
         res = num.toString().split(".");
       
       }
      else{ 
     value = Number(num);
     res = num.split(".");
     }
    if(res.length == 1 || (res[1].length < 3)) {
        value = value.toFixed(4);
    }
    return value
}

var ww = '0.01'
var xx = 5
var yy = .5
var zz = '4.567'
console.log(addZeroes(ww));
console.log(addZeroes(xx));
console.log(addZeroes(yy));
console.log(addZeroes(zz));

【讨论】:

  • 这是不正确的。这会在传递 String 时返回 5000.0000 我正在传递 Number 并需要:0.5000
猜你喜欢
  • 2011-02-03
  • 1970-01-01
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 2020-06-07
  • 1970-01-01
  • 2020-08-11
相关资源
最近更新 更多