51

次のように、変数に番号が割り当てられています。

var myVar = 1234;

ここで、最初に文字列に変換せずに、その数値から 2 桁目 (この場合は 2) を取得したいと考えています。それは可能ですか?

4

12 に答える 12

91

したがって、数値の 10 進数表記から 2 桁目を取得する必要があります。

最も単純で論理的な解決策は、文字列に変換することです。

var digit = (''+myVar)[1];

また

var digit = myVar.toString()[1];

簡単な方法でやりたくない場合、またはより効率的なソリューションが必要な場合は、次のようにすることができます。

var l = Math.pow(10, Math.floor(Math.log(myVar)/Math.log(10))-1);
var b = Math.floor(myVar/l);
var digit = b-Math.floor(b/10)*10;

デモンストレーション

パフォーマンスに興味のある方のためにjsperfを作りました。乱数の場合、ログを使用するのが断然最速のソリューションです。

于 2012-12-19T15:33:31.770 に答える
4

ループ内で、数値が 100 未満になるまで数値を 10 で割って、末尾の数字を取り除きます。次に、10 でモジュロを実行して 2 桁目を取得します。

if (x > 9) {
    while (x > 99) {
        x = (x / 10) | 0;  // Use bitwise '|' operator to force integer result.
    }
    secondDigit = x % 10;
}
else {
    // Handle the cases where x has only one digit.
}
于 2012-12-19T15:33:30.070 に答える
4

「数」は一つのことです。

その数値の表現(たとえば、10 進数の文字列 "1234") は別のものです。

10 進文字列の特定の数字が必要な場合は、文字列から取得するのが最善の策です:)

Q: Javascript の整数演算には落とし穴があることをご存知ですか?

Q: 文字列を使用しないことが重要なのはなぜですか? これは宿題ですか?面接の質問?

于 2012-12-19T15:34:24.533 に答える
3

function getNthDigit(val, n){
    //Remove all digits larger than nth
    var modVal = val % Math.pow(10,n);

    //Remove all digits less than nth
    return Math.floor(modVal / Math.pow(10,n-1));
}

// tests
[
  0, 
  1, 
  123, 
  123456789, 
  0.1, 
  0.001
].map(v => 
  console.log([
      getNthDigit(v, 1),
      getNthDigit(v, 2),
      getNthDigit(v, 3)
    ]
  ) 
);

于 2016-09-08T06:37:19.270 に答える
3

ご存知のように、質問は数字なしでそれを行う方法を求めていると思いますが、タイトルは「JavaScript: 数字から 2 桁目を取得しますか?」です。特定の数字、ピリオドを取得する方法を探しているときに、多くの人がこの答えを見つけることを意味します。

元の質問者をバッシングしているわけではありません。彼/彼女には理由があると確信していますが、検索の実用性の観点から、数値を文字列に変換して元に戻す回答をここに追加する価値があると思います。 、それははるかに簡潔で理解しやすい方法です。

let digit = Number((n).toString().split('').slice(1,1))

// e.g.
let digit = Number((1234).toString().split('').slice(1,1)) // outputs 2

文字列変換なしで数字を取得することは素晴らしいことですが、他の人や将来が本当にすばやく見て完全に理解できる明確で簡潔なコードを書こうとしているときは、簡単な文字列変換ワンライナーがより良い方法だと思いますしている。

于 2017-01-06T01:43:08.290 に答える
0

このロジックが必要な理由はわかりませんが、次のロジックで 2 番目の数値が取得されます

<script type="text/javascript">
    var myVal = 58445456;
    var var1 = new Number(myVal.toPrecision(1));
    var var2 = new Number(myVal.toPrecision(2));     
    var rem;
    rem = var1 - var2;
    var multi = 0.1;
    var oldvalue;
    while (rem > 10) {
        oldvalue = rem;
        rem = rem * multi;
        rem = rem.toFixed();           
    }
    alert(10-rem);       
</script>
于 2012-12-19T16:13:31.043 に答える
-4
var newVar = myVar;
while (newVar > 100) {
    newVar /= 10;
}

if (newVar > 0 && newVar < 10) {
   newVar = newVar;
}

else if (newVar >= 10 && newVar < 20) {
   newVar -= 10;
}

else if (newVar >= 20 && newVar < 30) {
   newVar -= 20;
}

else if (newVar >= 30 && newVar < 40) {
   newVar -= 30;
}

else if (newVar >= 40 && newVar < 50) {
   newVar -= 40;
}

else if (newVar >= 50 && newVar < 60) {
   newVar -= 50;
}

else if (newVar >= 60 && newVar < 70) {
   newVar -= 60;
}

else if (newVar >= 70 && newVar < 80) {
   newVar -= 70;
}

else if (newVar >= 80 && newVar < 90) {
   newVar -= 80;
}

else if (newVar >= 90 && newVar < 100) {
   newVar -= 90;
}

else {
   newVar = 0;
}

var secondDigit = Math.floor(newVar);

それが私がそれをする方法です:)

そして、これが動作することを示すJSFiddleです:) http://jsfiddle.net/Cuytd/

これはまた、元の数値が常に 9 より大きいことを前提としています...常に 9 より大きいとは限らない場合は、この質問をしていないと思います;)

于 2012-12-19T15:46:02.087 に答える