JS добавяне на нули

dakata__92

Super Moderator
Имам ето тази функцийка:
[js]
function test(seria,start,end,time){
start++;
window.open("...",'Window','width=700,height=700')
docRegNumber = document.getElementById('doc_reg_number').value = seria+' '+start;
document.getElementById('Submit').click();
if(start <= end){
setTimeout("mon("+start+","+end+","+time+")", time);
}
}
[/js]
викам я с onClick="test('5',1,999999,5000)"

Как да направя така че когато задам начална стойност на функцията тоест старт 1 и крайна 999 999

автоматично когато влиза в цикъла да получава нули до достигане броят на крайната стойност. Пример :
000 001
000 002
...
999 999
или
001
002
003
...
100
 
брой дължината на символите колко са, ако трябва да са 5, а старта ти почва от 1 символ, ще извадиш 5 от 1 и остават 4 символа, спрямо числото което имаш добавяш отпред нужните нули със стринг '0000'+5 и си готов

не разбрах много добре какво трябва да стане и за кой цикъл говориш, тъй като функцията я викаш след клик, тя вика друга функция, която не е ясно какво прави
 
Първо - целочислено число не може да започва с нула. Второ - всеки опит за аритметична операция със стрингова презентация на число и '0' пред него ще доведе до тъжни резултати. Иначе за самата презентация:

Код:
var padding = '000000';  // 6 нули - максимално запълване
var num = '' + 873;  // конвертваме числото до стринг
var result = padding.substring(0, padding.length - num.length) + num;
console.log(result)
000873
 
lamerko каза:
Първо - целочислено число не може да започва с нула. Второ - всеки опит за аритметична операция със стрингова презентация на число и '0' пред него ще доведе до тъжни резултати. Иначе за самата презентация:

Код:
var padding = '000000';  // 6 нули - максимално запълване
var num = '' + 873;  // конвертваме числото до стринг
var result = padding.substring(0, padding.length - num.length) + num;
console.log(result)
000873

Не е нужно да променям start на стринг а просто да го приравня така и да добавя нулите където ми трябват с променлива пък start да си остане число.
[js]
nulls = '000'+start;
[/js]
Така ще избегна проблемите. Ембака е отговорил как принципно и аз се сетих за този начин но ми се струва дълъг и търся някакво късичко и сбито решение. Не се сещам за по-късичак варянт, който да реши проблема и с нарастването и прочие. Смисъл 008,009,010,011 и тн.
 
При моя метод е нужно да приравниш числото си към стринг (в нова променлива - оригиналната ти ще остане непокътната) поради факта, че трябва да се разбере дължината на числото като стрингова презентация - например 123 е с дължина 3 символа чрез свойството length, при което налагаме маската от шест нули и получаваме отместване 3. Самата маска (
var padding = '000000';) следва да е константа и не е нужно да участва в цикъл, ако има такъв.
 
lamerko каза:
При моя метод е нужно да приравниш числото си към стринг (в нова променлива - оригиналната ти ще остане непокътната) поради факта, че трябва да се разбере дължината на числото като стрингова презентация - например 123 е с дължина 3 символа чрез свойството length, при което налагаме маската от шест нули и получаваме отместване 3. Самата маска (
var padding = '000000';) следва да е константа и не е нужно да участва в цикъл, ако има такъв.
Схванах го просто възможно ли е по някакъв начин да обвържа променливата еnd с този падинг? Примерно въвеждам веднъж 100 което значи 3 нули но после 9874 което значи 4 нули. Мога ли да го автоматизирам? Точно това търся затова и хванах твоят пример като цитат. :)
 
Добра практика е да си пишиш кода четливо и разбираемо. И до колкото се може - универсално, за да няма 999 реализации на един и същи код. В случая съм ти дал едно ПРИМЕРНО решение, което е почти готово за универсална функция - например допълващия символ и броя на маската може да се изнесат като параметри. И така имаш една фунция, която ще бачка в много и различни ситуации, а също така погледната от някой друг - веднага ще разбере както точно върши и ще може да я използва и той. Естествено има и други решения - например с рекурсия (малко се съмнявам да излезе по-бързо). Адаптивното натъкмяване, дето го искаш излиза доста от добрите практики - просто няма да ти спечели нищо.
 
lamerko каза:
Добра практика е да си пишиш кода четливо и разбираемо. И до колкото се може - универсално, за да няма 999 реализации на един и същи код. В случая съм ти дал едно ПРИМЕРНО решение, което е почти готово за универсална функция - например допълващия символ и броя на маската може да се изнесат като параметри. И така имаш една фунция, която ще бачка в много и различни ситуации, а също така погледната от някой друг - веднага ще разбере както точно върши и ще може да я използва и той. Естествено има и други решения - например с рекурсия (малко се съмнявам да излезе по-бързо). Адаптивното натъкмяване, дето го искаш излиза доста от добрите практики - просто няма да ти спечели нищо.
Това е ясно проблема ми сега е как примерно да направя динамичен този padding. Тоест променливата end ако е 999 да стане с един str_replace примерно 000 приравнено на padding по задание яшьиш винаги ще е по-малко от енд.
 
Аз съм ти дал работещ пример за динамично определяне на остатъка. Отказваш да го пробваш дори. Не виждам какво неясно има...

Код:
var len = ('' + end).length;

function pad(char, len, num) {
   var padding = Array(len + 1).join(char);
   var n = '' + num;

   return padding.substring(0, padding.length - n.length) + n;
}

Ползваш:

Код:
pad('0', len, num);
 
lamerko каза:
Аз съм ти дал работещ пример за динамично определяне на остатъка. Отказваш да го пробваш дори. Не виждам какво неясно има...

Код:
var len = ('' + end).length;

function pad(char, len, num) {
   var padding = Array(len + 1).join(char);
   var n = '' + num;

   return padding.substring(0, padding.length - n.length) + n;
}

Ползваш:

Код:
pad('0', len, num);
+1 колега! Благодаря за обясненията и всичко останало! :)
 

Back
Горе