Skip to content

Commit 46194dc

Browse files
committed
Fix numeric input handling and update docs
1 parent 1a20aa4 commit 46194dc

File tree

4 files changed

+16
-13
lines changed

4 files changed

+16
-13
lines changed

README.md

+11-5
Original file line numberDiff line numberDiff line change
@@ -51,21 +51,27 @@ echo Terbilang::convert('12345,67'); // Outputs: "dua belas ribu tiga ratus empa
5151
echo Terbilang::convert('12345,25', true); // Outputs: "dua belas ribu tiga ratus empat puluh lima rupiah dua puluh lima sen"
5252
```
5353

54+
**Note:** Will affected only for string input.
55+
5456
### Advanced Usage
5557

5658
You can use either numeric or string inputs, but there are some important considerations when dealing with decimals.
5759

58-
When using numeric input, trailing zeros after the decimal point are not preserved.
59-
For example, the number `12345.500` will be presented as `12345.5`.
60+
For **regular numbers**, when using numeric input, trailing zeros after the decimal point are not preserved. For example, the number `12345.500` will be presented as `12345.5`.
61+
62+
Especially for **currency amounts**, two decimal places are always used to adhere to rupiah standards.
6063

61-
To handle the entire decimal number (including trailing zeros), use string input.
64+
To handle the entire input number, including trailing zeros after the decimal point, use string input.
6265

6366
```php
6467
echo Terbilang::convert(12345.50); // Outputs: "dua belas ribu tiga ratus empat puluh lima koma lima"
6568
echo Terbilang::convert('12345.50'); // Outputs: "dua belas ribu tiga ratus empat puluh lima koma lima nol"
69+
echo Terbilang::convert('12345.500'); // Outputs: "dua belas ribu tiga ratus empat puluh lima koma lima nol nol"
6670

67-
echo Terbilang::convert(12345.50, true); // Outputs: "dua belas ribu tiga ratus empat puluh lima rupiah lima sen"
68-
echo Terbilang::convert('12345.50', true); // Outputs: "dua belas ribu tiga ratus empat puluh lima rupiah lima puluh sen"
71+
echo Terbilang::convert(12345.5, true); // Outputs: "dua belas ribu tiga ratus empat puluh lima rupiah lima puluh sen"
72+
echo Terbilang::convert(12345.50, true); // Outputs: "dua belas ribu tiga ratus empat puluh lima rupiah lima puluh sen"
73+
echo Terbilang::convert(12345.505, true); // Outputs: "dua belas ribu tiga ratus empat puluh lima rupiah lima puluh satu sen"
74+
echo Terbilang::convert('12345.500', true); // Outputs: "dua belas ribu tiga ratus empat puluh lima rupiah lima ratus sen"
6975
```
7076

7177
Additionally, with string input, you can easily pass already formatted numbers.

src/Terbilang.php

+2-8
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,8 @@ public static function convertRegulerNumber($number, $decimalSeparator = null)
5757
$number = Helper::digitsOnly($numberParts[0]);
5858
$decimal = isset($numberParts[1]) ? Helper::digitsOnly($numberParts[1]) : null;
5959
} else {
60-
/**
61-
* Convert $number to string and keep all the characters
62-
* The zero suffix at the decimal will be ignored
63-
*/
64-
$number = number_format($number, max(0, strlen(strchr($number, '.')) - 1), '.', '');
65-
6660
// Separate integer and decimal parts
67-
$numberParts = explode($decimalSeparator, $number);
61+
$numberParts = explode('.', $number);
6862
$number = intval($numberParts[0]);
6963
$decimal = isset($numberParts[1]) ? intval($numberParts[1]) : null;
7064
}
@@ -109,7 +103,7 @@ public static function convertCurrencyNumber($number, $decimalSeparator = null)
109103
$number = number_format($number, 2, '.', '');
110104

111105
// Separate integer and decimal parts
112-
$numberParts = explode($decimalSeparator, $number);
106+
$numberParts = explode('.', $number);
113107
$number = intval($numberParts[0]);
114108
$decimal = isset($numberParts[1]) ? intval($numberParts[1]) : null;
115109
}

tests/CurrencyNumberTest.php

+2
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,9 @@ public function dataProvider()
4949
[1000000000, 'satu miliar rupiah'],
5050
[9876543210, 'sembilan miliar delapan ratus tujuh puluh enam juta lima ratus empat puluh tiga ribu dua ratus sepuluh rupiah'],
5151
[200000000, 'dua ratus juta rupiah'],
52+
[900500.5, 'sembilan ratus ribu lima ratus rupiah lima puluh sen'],
5253
[900500.50, 'sembilan ratus ribu lima ratus rupiah lima puluh sen'],
54+
[900500.505, 'sembilan ratus ribu lima ratus rupiah lima puluh satu sen'],
5355
['900500.500', 'sembilan ratus ribu lima ratus rupiah lima ratus sen'],
5456
];
5557
}

tests/RegularNumberTest.php

+1
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ public function dataProvider()
7878
[1234567890123456, 'satu kuadriliun dua ratus tiga puluh empat triliun lima ratus enam puluh tujuh miliar delapan ratus sembilan puluh juta seratus dua puluh tiga ribu empat ratus lima puluh enam'],
7979
[123456.79, 'seratus dua puluh tiga ribu empat ratus lima puluh enam koma tujuh sembilan'],
8080
[100502.50, 'seratus ribu lima ratus dua koma lima'],
81+
[100502.505, 'seratus ribu lima ratus dua koma lima nol lima'],
8182
['100502.50', 'seratus ribu lima ratus dua koma lima nol'],
8283
['-1000000', 'minus satu juta'],
8384
];

0 commit comments

Comments
 (0)