递增一个数字而不去掉前导零

Increment a number without getting rid of leading zeroes

本文关键字:数字 一个      更新时间:2023-09-26

我正在从数据库中获取一个值,并将其作为数字重用。这个数字有前导零,并且限制为只有4位,也就是说格式是0001001001001000。我从零开始计数,当我把1加到这个数字上时,前面的零就消失了,我加的方式是

var databasevalue = 0000;
var incrementvalue = parseInt(databasevalue) + parseInt(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"

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

如果从数据库中获得的值是字符串,则需要执行以下操作:

  1. 获取其长度

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

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

  4. 将其转换为字符串

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

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

我今天创建了一个函数,您可以使用它。

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)

这里有一个您可以使用的函数。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));
相关文章: