LoginSignup
5
4

More than 5 years have passed since last update.

bitcoinの数値(satoshi)の扱い方(javascript)

Last updated at Posted at 2015-06-28

javascriptでのbitcoinの数値(satoshi)の扱い方

ビットコインの単位のおさらい

最小単位は1satoshiである
それを基準に表す

unit btc satoshi
BTC 1 100,000,000
mBTC 0.001 100,000
uBTC(bits) 0.000001 100
satoshi 0.00000001 1

BTCで扱うと浮動小数点で誤差が出ます。
オカネの扱いで誤差がでるとまずいです。
誤差がでないように固定小数点(Decimal型)かsatoshiで扱います

javascriptの数値型の扱い(satoshi)

浮動小数点型で整数としてなら以下の範囲を表現出来ます

  • -9,007,199,254,740,992 ~ 9,007,199,254,740,992 (約9007兆)

つまりsatoshiとして扱う場合、約9000万を超えると表現範囲を超えるということになります。
(ビットコインは2100万枚なので十分でしょう)
この値を超えて扱うと判断した場合にはbignumber.jsなどを使います
(monacoinは1億512万枚だけど一度に扱わなければ問題ない気もする。)

satoshiにする方法

value * 1e8でsasoshiとなりますが浮動小数点の誤差がでるので四捨五入します

例えば以下の数値は端数が出ます

0.31111111*1e8=31111111.000000004
Math.round(0.31111111*1e8) = 31111111

satoshiから戻す方法

satoshi * 1e-8で戻せますが例のごとく誤差が出ます。
四捨五入で対処します

99999999 * 1e-8=0.9999999900000001
(99999999 * 1e-8).toFixed(8)='0.99999999'
parseFloat((99999999 * 1e-8).toFixed(8))=0.99999999

satoshiの演算方法

普通にnumber型に対しての演算とあまり変わりませんが丸め処理だけはMath.roundなどの関数が使えないので桁を戻したりして対応します。

5
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
4