Add fraction number string support.

This commit is contained in:
sc0Vu 2018-03-05 16:41:55 +08:00
parent 5a80fb4245
commit d9b2dc3c6f
2 changed files with 50 additions and 5 deletions

View File

@ -453,7 +453,23 @@ class Utils
$number = str_replace('-', '', $number, $count); $number = str_replace('-', '', $number, $count);
$negative1 = new BigNumber(-1); $negative1 = new BigNumber(-1);
} }
$bn = new BigNumber($number); if (strpos($number, '.') > 0) {
$comps = explode('.', $number);
if (count($comps) > 2) {
throw new InvalidArgumentException('toBn number must be a valid number.');
}
$whole = $comps[0];
$fraction = $comps[1];
return [
new BigNumber($whole),
new BigNumber($fraction),
isset($negative1) ? $negative1 : false
];
} else {
$bn = new BigNumber($number);
}
if (isset($negative1)) { if (isset($negative1)) {
$bn = $bn->multiply($negative1); $bn = $bn->multiply($negative1);

View File

@ -490,11 +490,40 @@ class UtilsTest extends TestCase
$bn = Utils::toBn('-1'); $bn = Utils::toBn('-1');
$this->assertEquals($bn->toString(), '-1'); $this->assertEquals($bn->toString(), '-1');
// $bn = Utils::toBn('-0.1'); $bn = Utils::toBn('-0.1');
// $this->assertEquals($bn->toString(), '-0.1'); $this->assertEquals(count($bn), 3);
$this->assertEquals($bn[0]->toString(), '0');
$this->assertEquals($bn[1]->toString(), '1');
$this->assertEquals($bn[2]->toString(), '-1');
// $bn = Utils::toBn(-0.1); $bn = Utils::toBn(-0.1);
// $this->assertEquals($bn->toString(), -0.1); $this->assertEquals(count($bn), 3);
$this->assertEquals($bn[0]->toString(), '0');
$this->assertEquals($bn[1]->toString(), '1');
$this->assertEquals($bn[2]->toString(), '-1');
$bn = Utils::toBn('0.1');
$this->assertEquals(count($bn), 3);
$this->assertEquals($bn[0]->toString(), '0');
$this->assertEquals($bn[1]->toString(), '1');
$this->assertEquals($bn[2], false);
$bn = Utils::toBn('-1.69');
$this->assertEquals(count($bn), 3);
$this->assertEquals($bn[0]->toString(), '1');
$this->assertEquals($bn[1]->toString(), '69');
$this->assertEquals($bn[2]->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');
$bn = Utils::toBn('1.69');
$this->assertEquals(count($bn), 3);
$this->assertEquals($bn[0]->toString(), '1');
$this->assertEquals($bn[1]->toString(), '69');
$this->assertEquals($bn[2], false);
$bn = Utils::toBn(new BigNumber(1)); $bn = Utils::toBn(new BigNumber(1));
$this->assertEquals($bn->toString(), '1'); $this->assertEquals($bn->toString(), '1');