Return $fractionLength when number is with decimal point.
This commit is contained in:
sc0Vu 2018-05-27 22:48:02 +08:00
parent 4eaebd48aa
commit 4fd5d1ab67
2 changed files with 31 additions and 14 deletions

View File

@ -284,9 +284,7 @@ class Utils
if (is_array($bn)) {
// fraction number
list($whole, $fraction, $negative1) = $bn;
$fractionLength = strlen($fraction->toString());
list($whole, $fraction, $fractionLength, $negative1) = $bn;
if ($fractionLength > strlen(self::UNITS[$unit])) {
throw new InvalidArgumentException('toWei fraction part is out of limit.');
@ -504,6 +502,7 @@ class Utils
return [
new BigNumber($whole),
new BigNumber($fraction),
strlen($comps[1]),
isset($negative1) ? $negative1 : false
];
} else {

View File

@ -275,12 +275,24 @@ class UtilsTest extends TestCase
$bn = Utils::toWei('1.69', 'ether');
$this->assertEquals($bn->toString(), '1690000000000000000');
$bn = Utils::toWei('0.01', 'ether');
$this->assertEquals($bn->toString(), '10000000000000000');
$bn = Utils::toWei('0.002', 'ether');
$this->assertEquals($bn->toString(), '2000000000000000');
$bn = Utils::toWei(0.1, 'ether');
$this->assertEquals($bn->toString(), '100000000000000000');
$bn = Utils::toWei(1.69, 'ether');
$this->assertEquals($bn->toString(), '1690000000000000000');
$bn = Utils::toWei(0.01, 'ether');
$this->assertEquals($bn->toString(), '10000000000000000');
$bn = Utils::toWei(0.002, 'ether');
$this->assertEquals($bn->toString(), '2000000000000000');
$bn = Utils::toWei('-0.1', 'ether');
$this->assertEquals($bn->toString(), '-100000000000000000');
@ -541,39 +553,45 @@ class UtilsTest extends TestCase
$this->assertEquals($bn->toString(), '-1');
$bn = Utils::toBn('-0.1');
$this->assertEquals(count($bn), 3);
$this->assertEquals(count($bn), 4);
$this->assertEquals($bn[0]->toString(), '0');
$this->assertEquals($bn[1]->toString(), '1');
$this->assertEquals($bn[2]->toString(), '-1');
$this->assertEquals($bn[2], 1);
$this->assertEquals($bn[3]->toString(), '-1');
$bn = Utils::toBn(-0.1);
$this->assertEquals(count($bn), 3);
$this->assertEquals(count($bn), 4);
$this->assertEquals($bn[0]->toString(), '0');
$this->assertEquals($bn[1]->toString(), '1');
$this->assertEquals($bn[2]->toString(), '-1');
$this->assertEquals($bn[2], 1);
$this->assertEquals($bn[3]->toString(), '-1');
$bn = Utils::toBn('0.1');
$this->assertEquals(count($bn), 3);
$this->assertEquals(count($bn), 4);
$this->assertEquals($bn[0]->toString(), '0');
$this->assertEquals($bn[1]->toString(), '1');
$this->assertEquals($bn[2], false);
$this->assertEquals($bn[2], 1);
$this->assertEquals($bn[3], false);
$bn = Utils::toBn('-1.69');
$this->assertEquals(count($bn), 3);
$this->assertEquals(count($bn), 4);
$this->assertEquals($bn[0]->toString(), '1');
$this->assertEquals($bn[1]->toString(), '69');
$this->assertEquals($bn[2]->toString(), '-1');
$this->assertEquals($bn[2], 2);
$this->assertEquals($bn[3]->toString(), '-1');
$bn = Utils::toBn(-1.69);
$this->assertEquals($bn[0]->toString(), '1');
$this->assertEquals($bn[1]->toString(), '69');
$this->assertEquals($bn[2]->toString(), '-1');
$this->assertEquals($bn[2], 2);
$this->assertEquals($bn[3]->toString(), '-1');
$bn = Utils::toBn('1.69');
$this->assertEquals(count($bn), 3);
$this->assertEquals(count($bn), 4);
$this->assertEquals($bn[0]->toString(), '1');
$this->assertEquals($bn[1]->toString(), '69');
$this->assertEquals($bn[2], false);
$this->assertEquals($bn[2], 2);
$this->assertEquals($bn[3], false);
$bn = Utils::toBn(new BigNumber(1));
$this->assertEquals($bn->toString(), '1');