From d9b2dc3c6fe0c366b9a22b5b36321c0233c82f3a Mon Sep 17 00:00:00 2001 From: sc0Vu Date: Mon, 5 Mar 2018 16:41:55 +0800 Subject: [PATCH] Add fraction number string support. --- src/Utils.php | 18 +++++++++++++++++- test/unit/UtilsTest.php | 37 +++++++++++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 5 deletions(-) diff --git a/src/Utils.php b/src/Utils.php index 0cbf3d4..c9b0777 100644 --- a/src/Utils.php +++ b/src/Utils.php @@ -453,7 +453,23 @@ class Utils $number = str_replace('-', '', $number, $count); $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)) { $bn = $bn->multiply($negative1); diff --git a/test/unit/UtilsTest.php b/test/unit/UtilsTest.php index 7673e5d..ae94fae 100644 --- a/test/unit/UtilsTest.php +++ b/test/unit/UtilsTest.php @@ -490,11 +490,40 @@ class UtilsTest extends TestCase $bn = Utils::toBn('-1'); $this->assertEquals($bn->toString(), '-1'); - // $bn = Utils::toBn('-0.1'); - // $this->assertEquals($bn->toString(), '-0.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]->toString(), '-1'); - // $bn = Utils::toBn(-0.1); - // $this->assertEquals($bn->toString(), -0.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]->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)); $this->assertEquals($bn->toString(), '1');