如何在javascript中将整数格式化为特定长度?
我在Javascript中有一个数字,我知道它不到10000,而且是非负的。我想把它显示为一个四位数,带前导零。有什么比下面更优雅的吗如何在javascript中将整数格式化为特定长度?,javascript,formatting,Javascript,Formatting,我在Javascript中有一个数字,我知道它不到10000,而且是非负的。我想把它显示为一个四位数,带前导零。有什么比下面更优雅的吗 if(num<10) num="000"+num; else if(num<100) num="00"+num; else if(num<1000) num="0"+num; if(num我不认为JavaScript语言中有任何“内置”的东西可以做到这一点。下面是一个简单的函数: function FormatNumberLength(num
if(num<10) num="000"+num;
else if(num<100) num="00"+num;
else if(num<1000) num="0"+num;
if(num我不认为JavaScript语言中有任何“内置”的东西可以做到这一点。下面是一个简单的函数:
function FormatNumberLength(num, length) {
var r = "" + num;
while (r.length < length) {
r = "0" + r;
}
return r;
}
FormatNumberLength(10000, 5) outputs '10000'
FormatNumberLength(1000, 5) outputs '01000'
FormatNumberLength(100, 5) outputs '00100'
FormatNumberLength(10, 5) outputs '00010'
函数格式numberlength(num,length){
var r=”“+num;
而(r.长度<长度){
r=“0”+r;
}
返回r;
}
FormatNumberLength(10000,5)输出“10000”
FormatNumberLength(1000,5)输出“01000”
FormatNumberLength(100,5)输出“00100”
FormatNumberLength(10,5)输出“00010”
这可能会有帮助:
String.prototype.padLeft = function (length, character) {
return new Array(length - this.length + 1).join(character || '0') + this;
}
var num = '12';
alert(num.padLeft(4, '0'));
你可能会疯狂使用以下方法:
function PadDigits(input, totalDigits)
{
var result = input;
if (totalDigits > input.length)
{
for (i=0; i < (totalDigits - input.length); i++)
{
result = '0' + result;
}
}
return result;
}
功能填充码(输入,总数字)
{
var结果=输入;
如果(totalDigits>input.length)
{
对于(i=0;i<(totalDigits-input.length);i++)
{
结果='0'+结果;
}
}
返回结果;
}
但这并不会让生活变得更简单。C#在String类中有一个类似PadLeft和PadRight的方法,不幸的是Javascript没有内置此功能
function prefixZeros(number, maxDigits)
{
var length = maxDigits - number.toString().length;
if(length <= 0)
return number;
var leadingZeros = new Array(length + 1);
return leadingZeros.join('0') + number.toString();
}
//Call it like prefixZeros(100, 5); //Alerts 00100
函数前缀零(数字,最大位数)
{
var length=maxDigits-number.toString().length;
如果(长度一种有趣的(但有趣的)用零作为数字前缀的方法:
function FormatInteger(num, length) {
return (num / Math.pow(10, length)).toFixed(length).substr(2);
}
一个“while”循环应该可以让这变得足够简单
function formatLength(a) {
var num = document.getElementById(a)
while (num.value.length < 4) {
num.value = '0' + num.value
}
}
函数格式长度(a){
var num=document.getElementById(a)
while(num.value.length<4){
num.value='0'+num.value
}
}
这将循环直到num值的长度达到4位(假设您已将number元素的id作为参数传入)我遇到了几乎相同的问题,我找到了一种简洁的方法来解决它。如果我必须在代码中多次使用它,或者如果我使用它的位数超过四位数,我会使用其他建议的解决方案之一,但通过这种方法,我可以将其全部放在一个表达式中:
((x<10)?"000": (x<100)?"00": (x<1000)?"0": "") + x
((x我能想到的最简单的方法是:
("000" + num).slice(-4)
填充数字是一个字符串。
将数字添加到字符串时,它将转换为字符串。
Strings具有方法slice,该方法重新运行字符串的固定长度片段。
如果长度为负数,则返回的字符串将从字符串的末尾切片
要测试:
var num=12;
console.log(("000" + num).slice(-4)); // Will show "0012"
当然,这只适用于最多4位的正整数。稍微复杂一点的解决方案将处理正整数:
'0'.repeat( Math.max(4 - num.toString().length, 0)) + num
只要位数(字符串长度)小于4,就可以通过重复添加零来创建字符串
添加数字,然后再将其转换为字符串。另一个:
function format_number_length(num, length) {
var r = num.toString();
if (r.length<length) r = Array(length - r.length + 1).join('0') + r;
return r;
}
函数格式\u编号\u长度(num,length){
var r=num.toString();
如果(r.length我认为最简洁直观的方法是:
function toFixedLength(input, length, padding) {
padding = String(padding || "0");
return (padding.repeat(length) + input).slice(-length);
}
如果程序员更直观,这里的slice
方法可以替换为substr
。我来寻找答案,但我认为这是一种更好的功能方法(ES6):
const formatNumberToString=(num,minChars)=>{
返回num.toString().length
此外,这可以在一行中实现,因为ES2017填充到最小长度只需使用
和
:
让num=3
设str=num.toString().padStart(3,“0”)
控制台日志(str)/“003”
或者,如果浮子的整个部分应为固定长度:
let num=3.141
设arr=num.toString().split(“.”)
arr[0]=arr[0]。焊盘起始(3,“0”)
设str=arr.join(“.”)
控制台日志(str)/“003.141”
ES6方法的最新版本:
我知道这个问题有点老了,但对于任何在Java或Python上寻找类似字符串格式的东西的人来说,我有以下帮助器方法:
String.format = (...args) => {
if( args.length == 0 ){
throw new Error("String format error: You must provide at least one argument");
}
const delimiter = "@LIMIT*";
const format = String(args.shift(1,0)).replace(/(%[0-9]{0,}[sd])/g, delimiter+"$1"+delimiter).split(delimiter); // First element is the format
if( [...format].filter(el=>el.indexOf("%")>-1).length != args.length ){
throw new Error("String format error: Arguments must match pattern");
}
if( format.length == 1 && args.length == 0 ){
return String(format);
}
let formattedString = "";
// patterns
const decimalPattern = /%[0-9]{0,}d/;
const stringPattern = /%s/;
if( format.length == 0 ){
throw new Error("String format error: Invalid format");
}
let value = null;
let indexOfParam = 0;
let currPattern = null;
while( args.length > 0 ) {
currPattern = format[indexOfParam];
indexOfParam++;
if( currPattern.indexOf("%")<0 ){
formattedString+=currPattern;
continue;
}
value = args.shift(0,1);
if( decimalPattern.test(currPattern) ){
let numberLength = parseInt(currPattern.replace(/[^0-9]/g,''));
if( isNaN(numberLength) ){
numberLength = 0;
}
formattedString+=numberToLength(value, numberLength);
} else if( stringPattern.test(currPattern) ) {
if( typeof value === 'object' && value.toSource ){
formattedString+=String(value.toSource());
} else {
formattedString+=String(value);
}
} else {
throw new Error("String format error: Unrecognized pattern:"+currPattern);
}
}
return formattedString;
}
const numberToLength = (number, length) => {
length = parseInt(length);
number = String(number);
if( isNaN(length) || isNaN(parseInt(number)) ){
throw new Error("Invalid number passed");
}
while( number.length < length ) {
number = "0" + number;
}
return number;
}
String.format=(…args)=>{
如果(args.length==0){
抛出新错误(“字符串格式错误:必须至少提供一个参数”);
}
常量分隔符=“@LIMIT*”;
const format=String(args.shift(1,0)).replace(/([0-9]{0,}[sd])/g,delimiter+“$1”+delimiter.split(delimiter);//第一个元素是格式
if([…format].filter(el=>el.indexOf(“%”)>-1).length!=args.length){
抛出新错误(“字符串格式错误:参数必须匹配模式”);
}
if(format.length==1&&args.length==0){
返回字符串(格式);
}
设formattedString=“”;
//图案
常量decimalPattern=/%[0-9]{0,}d/;
常量stringPattern=/%s/;
if(format.length==0){
抛出新错误(“字符串格式错误:无效格式”);
}
设value=null;
设indexOfParam=0;
设currPattern=null;
而(args.length>0){
currPattern=格式[indexOfParam];
indexOfParam++;
if(currPattern.indexOf(“%”){
长度=parseInt(长度);
数字=字符串(数字);
if(isNaN(长度)| | isNaN(parseInt(数字))){
抛出新错误(“传递的数字无效”);
}
while(number.length
我更喜欢调用num.toString()方法。使用““+num”的工作原理与.toString()相同,如果这对您很重要的话,需要更少的字符来使.js文件更紧凑。函数FormatInteger(n,l,c){return(n/Math.pow(10,l)).toFixed(l.substr(2).替换(/0/g,c | |‘)}
。控制台.log(FormatInteger)(432,8));
您可以使用repeat
-(n,length)=>(“0”。repeat(length)+n)。slice(-length) const length_required = 5;
let num = 10;
num = "0".repeat(length_required - String(num).length) + num;
console.log(num)
// output: 00010
let num = 1000;
num = "0".repeat(length_required - String(num).length) + num;
console.log(num)
// output: 01000
String.format = (...args) => {
if( args.length == 0 ){
throw new Error("String format error: You must provide at least one argument");
}
const delimiter = "@LIMIT*";
const format = String(args.shift(1,0)).replace(/(%[0-9]{0,}[sd])/g, delimiter+"$1"+delimiter).split(delimiter); // First element is the format
if( [...format].filter(el=>el.indexOf("%")>-1).length != args.length ){
throw new Error("String format error: Arguments must match pattern");
}
if( format.length == 1 && args.length == 0 ){
return String(format);
}
let formattedString = "";
// patterns
const decimalPattern = /%[0-9]{0,}d/;
const stringPattern = /%s/;
if( format.length == 0 ){
throw new Error("String format error: Invalid format");
}
let value = null;
let indexOfParam = 0;
let currPattern = null;
while( args.length > 0 ) {
currPattern = format[indexOfParam];
indexOfParam++;
if( currPattern.indexOf("%")<0 ){
formattedString+=currPattern;
continue;
}
value = args.shift(0,1);
if( decimalPattern.test(currPattern) ){
let numberLength = parseInt(currPattern.replace(/[^0-9]/g,''));
if( isNaN(numberLength) ){
numberLength = 0;
}
formattedString+=numberToLength(value, numberLength);
} else if( stringPattern.test(currPattern) ) {
if( typeof value === 'object' && value.toSource ){
formattedString+=String(value.toSource());
} else {
formattedString+=String(value);
}
} else {
throw new Error("String format error: Unrecognized pattern:"+currPattern);
}
}
return formattedString;
}
const numberToLength = (number, length) => {
length = parseInt(length);
number = String(number);
if( isNaN(length) || isNaN(parseInt(number)) ){
throw new Error("Invalid number passed");
}
while( number.length < length ) {
number = "0" + number;
}
return number;
}