util/util: helper parseValue() converts bitcoin decimals into bigint
This commit is contained in:
parent
fde1cb75a5
commit
da5719249f
|
@ -5,6 +5,7 @@ var Address = require('../Address').class();
|
|||
var PrivateKey = require('../PrivateKey').class();
|
||||
var networks = require('../networks');
|
||||
var KeyModule = require('../Key');
|
||||
var coinUtil = require('../util/util');
|
||||
|
||||
suite('basic');
|
||||
|
||||
|
@ -110,8 +111,22 @@ function is_invalid(datum)
|
|||
assert.equal(valid, false);
|
||||
}
|
||||
|
||||
function test_value(datum)
|
||||
{
|
||||
if (datum.length != 2)
|
||||
throw new Error("Bad test");
|
||||
|
||||
var decimal = datum[0];
|
||||
var intStr = datum[1];
|
||||
|
||||
var bn = coinUtil.parseValue(decimal);
|
||||
assert.notEqual(bn, undefined);
|
||||
assert.equal(bn.toString(), intStr);
|
||||
}
|
||||
|
||||
var dataValid = JSON.parse(fs.readFileSync('test/base58_keys_valid.json'));
|
||||
var dataInvalid = JSON.parse(fs.readFileSync('test/base58_keys_invalid.json'));
|
||||
var dataValues = JSON.parse(fs.readFileSync('test/values.json'));
|
||||
|
||||
test('valid', function() {
|
||||
dataValid.forEach(function(datum) { is_valid(datum); });
|
||||
|
@ -121,3 +136,7 @@ test('invalid', function() {
|
|||
dataInvalid.forEach(function(datum) { is_invalid(datum); });
|
||||
});
|
||||
|
||||
test('values', function() {
|
||||
dataValues.forEach(function(datum) { test_value(datum); });
|
||||
});
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
[
|
||||
[ "0", "0" ],
|
||||
[ "1.0", "100000000" ],
|
||||
[ "0.1", "10000000" ],
|
||||
[ ".1", "10000000" ],
|
||||
[ "0.0005", "50000" ]
|
||||
]
|
43
util/util.js
43
util/util.js
|
@ -107,6 +107,49 @@ var formatValue = exports.formatValue = function (valueBuffer) {
|
|||
return integerPart+"."+decimalPart;
|
||||
};
|
||||
|
||||
var reFullVal = /^\s*(\d+)\.(\d+)/;
|
||||
var reFracVal = /^\s*\.(\d+)/;
|
||||
var reWholeVal = /^\s*(\d+)/;
|
||||
|
||||
function padFrac(frac)
|
||||
{
|
||||
while (frac.length < 8)
|
||||
frac = frac + '0';
|
||||
return frac;
|
||||
}
|
||||
|
||||
function parseFullValue(res)
|
||||
{
|
||||
return bignum(res[1]).mul('100000000').add(padFrac(res[2]));
|
||||
}
|
||||
|
||||
function parseFracValue(res)
|
||||
{
|
||||
return bignum(padFrac(res[1]));
|
||||
}
|
||||
|
||||
function parseWholeValue(res)
|
||||
{
|
||||
return bignum(res[1]).mul('100000000');
|
||||
}
|
||||
|
||||
exports.parseValue = function parseValue(valueStr)
|
||||
{
|
||||
var res = valueStr.match(reFullVal);
|
||||
if (res)
|
||||
return parseFullValue(res);
|
||||
|
||||
res = valueStr.match(reFracVal);
|
||||
if (res)
|
||||
return parseFracValue(res);
|
||||
|
||||
res = valueStr.match(reWholeVal);
|
||||
if (res)
|
||||
return parseWholeValue(res);
|
||||
|
||||
return undefined;
|
||||
};
|
||||
|
||||
var pubKeyHashToAddress = exports.pubKeyHashToAddress = function (pubKeyHash, addressVersion) {
|
||||
if (!pubKeyHash) return "";
|
||||
|
||||
|
|
Loading…
Reference in New Issue