JSの数値表記とその変換
2022/03/05
JavaScriptの数値表記とその変換に関して簡単にまとめてみました。
JavaScriptの数値表記
Number
JSのNumber表記はいくつかあります。
12345 // 10進数の12345
1.23 // 1.23
1.23e4 // 1.23 × 10の4乗
1.23E4 // 1.23 × 10の4乗
0xff88 // 16進数のFF88(=10進数の65416)
0Xff88 // 16進数のFF88(=10進数の65416)
0b1101 // 2進数の1101(=10進数の13)
0B1101 // 2進数の1101(=10進数の13)
0o755 // 8進数の755(=10進数の493)
0O755 // 8進数の755(=10進数の493)
// ES2021から以下のような_表記が可能に
1_23_45 // 12345
0xff_ff // 0xffff
BigInt
通常のNumber型が2^53(~9000兆)の精度を持つのに対して、ES2020で追加されたBigIntでは任意精度の整数を扱うことが可能になりました。
整数の末尾にnを追加するか、BigInt()
コンストラクターを呼び出し(new
演算子は除く)、整数値または文字列値を与えることで生成することができます。
Web3の開発では桁数の大きい整数を扱うことがおおいので、このBigIntを使う場合もあります。
console.log(9007199254740991n);
// ↪ 9007199254740991n
console.log(BigInt(9007199254740991));
// ↪ 9007199254740991n
console.log(BigInt("9007199254740991"));
// ↪ 9007199254740991n
console.log(BigInt("0x1fffffffffffff"));
// ↪ 9007199254740991n
Number → String変換
NumberからStringへの変換はtoString
がmejorですが、他にも色々あります。
toString
引数にradix進数を指定することも可能です。
const x = 65535;
console.log(x.toString());
// ↪ 65535
console.log(x.toString(16));
// ↪ ffff
toExponential
指数表記の文字列に変換します。 引数には小数点以下の桁数を指定できます。
const x = 12345689;
console.log(x.toExponential());
// ↪ 1.2345689e+7
console.log(x.toExponential(3));
// ↪ 1.235e+7
toFixed
固定小数点表記の文字列に変換します。 引数には小数点以下の桁数を指定できます。
const x = 1.23456;
console.log(x.toFixed());
// ↪ 1
console.log(x.toFixed(3));
// ↪ 1.234
toPrecision
指定された精度で表した文字列に変換します。
const a = 123.456;
console.log(a.toPrecision(4));
// ↪ 123.5
const b = 0.004;
console.log(b.toPrecision(4));
// ↪ 0.004000
const c = 1.23e5;
console.log(c.toPrecision(4));
// ↪ 1.230e+5
Intl.NumberFormat
Intl.NumberFormat
では言語に依存した文字列への変換が可能です。
Chrome, Firefox, Safari, IE11で使用可能なmethodになります。
const x = 123456.789;
const ja = new Intl.NumberFormat('ja-JP');
console.log(ja.format(x));
// ↪ 123,456.789 (日本様式)
const en = new Intl.NumberFormat("en-US");
console.log(en.format(x));
// ↪ 123,456.789 (アメリカ様式)
const de = new Intl.NumberFormat("de-DE");
console.log(de.format(x));
// ↪ 123.456,789 (ドイツ様式)
const jpy = new Intl.NumberFormat('ja-JP', { style: 'currency', currency: 'JPY' });
console.log(jpy.format(x));
// ↪ ¥123,457 (日本円)