【问题标题】:Increment a number without getting rid of leading zeroes增加一个数字而不去掉前导零
【发布时间】:2022-02-16 17:33:56
【问题描述】:

我正在从数据库中获取一个值,并将其作为数字重用。此数字有前导零,并且仅限于 4 位数字,表示格式为 0001001001001000。当我在这个数字上加 1 时,我从零开始计数,前导零消失了,例如,我添加的方式是

var databasevalue = 0000;
var incrementvalue = parseInt(databasevalue) + parseInt(1); 

【问题讨论】:

标签: javascript html


【解决方案1】:
// I suppose databasevalue is a string
var databasevalue = "0125"; 

// coerce the previous variable as a number and add 1
var incrementvalue = (+databasevalue) + 1;

// insert leading zeroes with a negative slice
incrementvalue = ("0000" + incrementvalue).slice(-4); // -> result: "0126"

【讨论】:

  • 这会不会出错,它很简单,我得到了我想要的
  • @HogRider:请记住,如果您最终得到奇怪的值,那是因为 JavaScript 引擎将数字视为八进制(以 8 为底)而不是以 10 为底。如果您使用的是最近的东西,并且您使用的是严格模式,这应该不是问题;如果您使用的是较旧的或松散模式,则可能是。
【解决方案2】:

数字没有前导零;这是一个字符串的东西。

如果您从数据库中获取的值是一个字符串,您需要这样做:

  1. 获取它的长度

  2. 使用parseInt(theString, 10) 以基数 10 解析它(在某些引擎上,前导零使其认为应该使用基数 8)

  3. 给它加一个(你从不需要在实际数字上使用parseInt,所以它只是+ 1而不是+ parseInt(1)

  4. 将其转换为字符串

  5. 在循环中将零添加到字符串的开头,直到它与原始字符串一样长

没有内置的填充函数可以为你做#5,你要么必须写一个,要么做一个像theString = "00000000000000000000000".substr(theString.length - desiredLength) + theString这样的技巧(确保初始字符串有足够的零来覆盖你想要覆盖的内容)。

【讨论】:

  • 问题是例如 9 前导零是 3,如果我加 1,它将是 10,如果我添加原始前导零,我将有 5 位数字,这不是我想要的。我理解您的解决方案的方式是获取原始零,然后将其添加到增量值中,如果我错了,请纠正我
  • @HogRider: 不,你记得(在#1 中)"0009" 是四位数长,然后将其转换为数字,加一,再转换为字符串("10" ),然后在第 5 步中,根据需要在开头添加尽可能多的零,使其再次长四位数——在这种情况下,theString.length - desiredLength 将是 -2,所以你最终会得到 "00000000000000000000000".substr(-2) + theString,这将给你"0010"
【解决方案3】:

我今天创建了一个你可以使用的函数。

function incrementLeadingZeroNumber(leadingZeroString, amountToIncrement){
  var amountOfZerosToAdd = leadingZeroString.length;
  var stringToNumber = (+leadingZeroString);
  var zerosToAdd = new Array(amountOfZerosToAdd + 1).join( '0' );

  var zerosAndNewNumber = zerosToAdd + ( stringToNumber + amountToIncrement )
  var amountToSlice = (-1 * amountOfZerosToAdd)
  var newString = zerosAndNewNumber.slice(amountToSlice)
  return newString
}

//example usage
var incrementedNumber = incrementLeadingZeroNumber('0030', -10)

【讨论】:

    【解决方案4】:

    这是您可以使用的功能。 min_size 是字符串的长度,因此在您的情况下,'0000' min_size 是 4。您的数据库值从 0 开始。该函数将数字转换为字符串并检查字符串的长度。然后它添加前导零,直到达到 min_size。 console.log 显示后面的第一个数字“0001”。在这里很容易改变前导零的数量。

    var min_size = 4;
    var start_value = 0;
    
    function leading_zero (num) {
        var new_num = num.toString();
        for (var i = new_num.length; i < min_size; i++) {
            new_num = '0' + new_num;
        }
        return new_num;
    }
    
    console.log(leading_zero(start_value + 1));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多