Thư viện hổ trợ chuyển đổi số sang chữ số Tiếng Việt.
Cài đặt Number To Words thông qua Composer:
composer require phpviet/number-to-words
hoặc nếu bạn muốn sử dụng không dựa trên framework thì tiếp tục xem tiếp.
Thư viện cung cấp cho chúng ta lớp PHPViet\NumberToWords\Transformer
để thực hiện việc chuyển đổi
thông qua phương thức toWords
của đối tượng:
use PHPViet\NumberToWords\Transformer;
$transformer = new Transformer();
// âm năm
$transformer->toWords(-5);
// năm
$transformer->toWords(5);
// năm phẩy năm
$transformer->toWords(5.5);
// mười lăm
$transformer->toWords(15);
// một trăm linh năm
$transformer->toWords(105);
// bốn
$transformer->toWords(4);
// mười bốn
$transformer->toWords(14);
// hai mươi tư
$transformer->toWords(24);
// một trăm ba mươi tư
$transformer->toWords(134);
// một
$transformer->toWords(1); // một
// mười một
$transformer->toWords(11);
// hai mươi mốt
$transformer->toWords(21);
// một trăm nghìn không trăm hai mươi mốt.
$transformer->toWords(100021);
// một trăm ba mươi mốt triệu không trăm năm mươi nghìn không trăm ba mươi lăm
$transformer->toWords(131050035);
Cũng như cách sử dụng của chuyển số sang chữ số ta cũng sử dụng lớp PHPViet\NumberToWords\Transformer
để thực thi tác vụ:
use PHPViet\NumberToWords\Transformer;
$transformer = new Transformer();
// năm triệu sáu trăm chín mươi nghìn bảy trăm đồng
$transformer->toCurrency(5690700);
// chín mươi lăm triệu năm trăm nghìn hai trăm đồng
$transformer->toCurrency(95500200);
// tám trăm năm mươi tư triệu chín trăm đồng
$transformer->toCurrency(854000900);
Trong một số loại tiền tệ, bạn cần thay đổi cách đọc theo đơn vị quy đổi, ví dụ 1 đô = 100 xen
use PHPViet\NumberToWords\Transformer;
// Đặt số chữ số phần thập phân (tham số đầu tiên Dictionary có thể null)
$transformer = new Transformer(null, 2);
// năm mươi sáu đô chín mươi xen, thay vì năm mươi sáu đô chín xen
$transformer->toCurrency(56.90);
Ngoài ra ta còn có thể sử dụng đơn vị tiền tệ khác thông qua tham trị thứ 2 của phương thức
toCurrency
, với mảng phần từ đầu tiên là đơn vị cho số nguyên và kế tiếp là đơn vị của phân số:
use PHPViet\NumberToWords\Transformer;
$transformer = new Transformer();
// sáu nghìn bảy trăm bốn mươi hai đô bảy xen
$transformer->toCurrency(6742.7, ['đô', 'xen']);
// chín nghìn bốn trăm chín mươi hai đô mười lăm xen
$transformer->toCurrency(9492.15, ['đô', 'xen']);
// tám nghìn ba trăm sáu mươi mốt đô bốn xen
$transformer->toCurrency('8361.40', ['đô', 'xen']);
Trong thư viện ngoài cách đọc tiêu chuẩn còn hổ trợ cho chúng ta lớp PHPViet\NumberToWords\SouthDictionary
giúp đọc số theo phong cách trong Nam:
use PHPViet\NumberToWords\Transformer;
use PHPViet\NumberToWords\SouthDictionary;
$transformer = new Transformer();
$southDictionary = new SouthDictionary();
$southTransformer = new Transformer($southDictionary);
$transformer->toWords(101); // một trăm linh một
$southTransformer->toWords(101); // một trăm lẻ một
$transformer->toWords(1000); // một nghìn
$southTransformer->toWords(1000); // một ngàn
$transformer->toWords(24) // hai mươi tư
$southTransformer->toWords(24); // hai mươi bốn
$transformer->toCurrency(124001); // một trăm hai mươi tư nghìn không trăm linh một
$southTransformer->toCurrency(124001); // một trăm hai mươi bốn ngàn không trăm lẻ một
Nếu như bạn muốn thay đổi cách đọc theo ý bạn thì hãy tạo một lớp Dictionary
kế thừa
PHPViet\NumberToWords\Dictionary
hoặc thực thi mẫu trừu tượng PHPViet\NumberToWords\DictionaryInterface
:
use PHPViet\NumberToWords\Dictionary;
use PHPViet\NumberToWords\Transformer;
class MyDictionary extends Dictionary {
/**
* @inheritDoc
*/
public function specialTripletUnitFive(): string
{
return 'nhăm';
}
}
$transformer = new Transformer();
$myDictionary = new MyDictionary();
$myTransformer = new Transformer($myDictionary);
$transformer->toWords(15); // mười lăm
$myTransformer->toWords(15); // mười nhăm
Nếu như bạn cảm thấy thư viện còn thiếu sót hoặc sai sót và bạn muốn đóng góp để phát triển chung,
chúng tôi rất hoan nghênh! Hãy tạo các issue
để đóng góp ý tưởng cho phiên bản kế tiếp
hoặc tạo PR
để đóng góp. Cảm ơn!