はじめに

Node.js で BTC の単位変換(1 BTC = 100,000,000 Satoshi)を正確に行う方法を調べた。

TL;DR

  • Node.js で BTC の単位変換をするには satoshi-bitcoin パッケージを使う
  • toSatochi で BTC → satoshi
  • toBitcoin で BTC ← satoshi

目的・やったこと

通常、整数型と浮動小数点数との変換には、丸め誤差による影響が出てくる。BTC の単位変換を行う際に、正確に変換する方法を調べた。

目次

  1. はじめに
  2. TL;DR
  3. 目的・やったこと
  4. 環境・条件
  5. 詳細
    1. インストール
    2. BTC → Satoshi
    3. BTC ← Satoshi
    4. おまけ
  6. まとめ
  7. その他・メモ
  8. 参考文献

環境・条件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ sw_vers
ProductName: Mac OS X
ProductVersion: 10.14.5
BuildVersion: 18F132

$ nodebrew --version
nodebrew 0.9.7

$ node --version
v8.16.0

$ npm --version
6.4.1

$ npm v satoshi-bitcoin
satoshi-bitcoin@1.0.4

詳細

インストール

1
$ npm install satoshi-bitcoin

BTC → Satoshi

BTC から Satoshi への変換は toSatoshi メソッド。数値でも文字列でも OK。

1
2
3
4
5
6
7
const sb = require('satoshi-bitcoin');

sb.toSatoshi(1);
//=>100000000

sb.toSatoshi("1.5");
//=>150000000

BTC ← Satoshi

Satoshi から BTC への変換は toBitcoin メソッド。数値でも文字列でも OK。

1
2
3
4
5
6
7
const sb = require('satoshi-bitcoin');

sb.toBitcoin(100000000);
//=>1

sb.toBitcoin("150000000");
//=>1.5

ただし , で区切ってあると TypeError になるので、replace などで除去すること。

1
2
3
4
5
sb.toBitcoin("150,000,000");
//=>TypeError

sb.toBitcoin("150,000,000".replace(/,/g, ""));
//=>1.5

おまけ

すごく雑な実験だけど、自力でやろうと思うとこんな状況になるので、おとなしくパッケージ利用した方が良い。

1
2
3
4
5
for (var i=1, j=0.00000001; j<=1.0; i++, j+=0.00000001) {
if (i !== j * 100000000) {
console.log(`error: ${i} : ${j * 100000000}`);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
error: 3 : 3.0000000000000004
error: 6 : 5.999999999999999
error: 7 : 6.999999999999999
error: 8 : 7.999999999999999
error: 9 : 8.999999999999998
error: 10 : 9.999999999999998
error: 11 : 10.999999999999998
error: 12 : 11.999999999999998
error: 14 : 14.000000000000002
error: 15 : 15.000000000000002
error: 16 : 16.000000000000004
error: 17 : 17.000000000000004
error: 18 : 18.000000000000004
error: 19 : 19.000000000000007
error: 20 : 20.000000000000007
...

まとめ

  • Node.js で BTC の単位変換をするには satoshi-bitcoin パッケージを使う
  • toSatochi で BTC → satoshi
  • toBitcoin で BTC ← satoshi

その他・メモ

Last Commit が 2018/05/24 だけど、特に問題なかった。

参考文献

関連記事