JQuery / JavaScriptインクリメント数
-
05-07-2019 - |
質問
毎秒特定の値で数値をインクリメントし、JavaScriptまたはJQueryを使用してフォーマットを保持しようとしています
私はそれをするのに苦労しています。
次のような番号があるとします:
1412015
これを1秒ごとにインクリメントできる数は可変で、0.1から2までの任意の値を指定できます
1秒ごとにインクリメントする必要がある値が0.54である場合、数値をインクリメントし、次の出力を取得できます。
1,412,016
1,412,017
1,412,018
ありがとう
Eef
解決
増分のケースと何を表示したいかを理解できません。 ただし、数値をフォーマットするための解決策を検討することにしました。
数値フォーマットルーチンには、配列を解析するものと、正規表現でフォーマットするものの2つのバージョンがあります。読みやすいものではないことは認めますが、このアプローチを思いつくのは楽しかったです。
興味がある場合に備えて、コメントで行を説明しようとしました
配列解析バージョン:
function formatNum(num) {
//Convert a formatted number to a normal number and split off any
//decimal places if they exist
var parts = String( num ).replace(/[^\d.]-/g,'').split('.');
//turn the string into a character array and reverse
var arr = parts[0].split('').reverse();
//initialize the return value
var str = '';
//As long as the array still has data to process (arr.length is
//anything but 0)
//Use a for loop so that it keeps count of the characters for me
for( var i = 0; arr.length; i++ ) {
//every 4th character that isn't a minus sign add a comma before
//we add the character
if( i && i%3 == 0 && arr[0] != '-' ) {
str = ',' + str ;
}
//add the character to the result
str = arr.shift() + str ;
}
//return the final result appending the previously split decimal place
//if necessary
return str + ( parts[1] ? '.'+parts[1] : '' );
}
正規表現のバージョン:
function formatNum(num) {
//Turn a formatted number into a normal number and separate the
//decimal places
var parts = String( num ).replace(/[^\d.]-/g,'').split('.');
//reverse the string
var str = parts[0].split('').reverse().join('');
//initialize the return value
var retVal = '';
//This gets complicated. As long as the previous result of the regular
//expression replace is NOT the same as the current replacement,
//keep replacing and adding commas.
while( retVal != (str = str.replace(/(\d{3})(\d{1,3})/,'$1,$2')) ) {
retVal = str;
}
//If there were decimal points return them back with the reversed string
if( parts[1] ) {
return retVal.split('').reverse().join('') + '.' + parts[1];
}
//return the reversed string
return retVal.split('').reverse().join('');
}
0.54ずつ増分されたフォーマットされた数値を毎秒出力する場合、間隔を使用して増分と出力を行うことができます。
Firebugのみを使用したスーパーショートFirefoxの例:
var num = 1412015;
setInterval(function(){
//Your 0.54 value... why? I don't know... but I'll run with it.
num += 0.54;
console.log( formatNum( num ) );
},1000);
ここですべての動作を確認できます: http://jsbin.com/opoze
他のヒント
1秒ごとに値を増やすには、次の構造を使用します。
var number = 0; // put your initial value here
function incrementNumber () {
number += 1; // you can increment by anything you like here
}
// this will run incrementNumber() every second (interval is in ms)
setInterval(incrementNumber, 1000);
これにより、数値がフォーマットされます:
function formatNumber(num) {
num = String(num);
if (num.length <= 3) {
return num;
} else {
var last3nums = num.substring(num.length - 3, num.length);
var remindingPart = num.substring(0, num.length - 3);
return formatNumber(remindingPart) + ',' + last3nums;
}
}
function rounded_inc(x, n) {
return x + Math.ceil(n);
}
var x = 1412015;
x = rounded_inc(x, 0.54);
所属していません StackOverflow