Đọc từ số sang chữ trong laravel
Trong laravel em dùng number-to-words để chuyển từ số sang chữ thì bị lỗi như bên dưới. A/c nào biết cách khắc phục chỉ em với.
- composer require phpviet/number-to-words
- use PHPViet\NumberToWords\Transformer;
- $transformer = new Transformer();
- $transformer->toCurrency('1,514.60', ['đô la mỹ', 'xu'])
1,514.60 USD - > một nghìn năm trăm mười bốn đô la mỹ sáu xu.
Bị mất đi chữ mươi. Các trường hợp khác thì vẫn đọc đúng.
=> Kết quả đúng: một nghìn năm trăm mười bốn đô la mỹ sáu mươi xu
Em có tham khảo hướng dẫn của thư viện này thì cũng bị
-
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']);
2 CÂU TRẢ LỜI
Do tác giả cố tình xoá các chữ số 0 sau phần thập phân nên xảy ra việc này, mình đang tạo PR để thêm một option để tắt cái này, bạn có thể tạm thời sửa bằng cách clone thư viện ra và comment lại dòng 31
$number += 0; // trick xóa các số 0 lẻ sau cùng của phân số đối với input là chuỗi.
Trong file src/Concerns/NumberResolver.php
protected function resolveNumber($number): array
{
if (! is_numeric($number)) {
throw new InvalidArgumentException(sprintf('Number arg (%s
) must be numeric!', $number));
}
//$number += 0; // trick xóa các số 0 lẻ sau cùng của phân số đối với input là chuỗi.
$number = (string) $number;
$minus = '-' === $number[0];
if (false !== strpos($number, '.')) {
$numbers = explode('.', $number, 2);
} else {
$numbers = [$number, 0];
}
return array_merge([$minus], array_map('abs', $numbers));
}
Em thử comment và xóa cache nhưng vẫn hok được ạ.
@napmucmayin Bạn phải truyền vào kiểu chuỗi, "6742.70" nhé, hoặc có thể sửa lại theo PR của mình tại đây, sẽ cung cấp thêm phần setDecimalPart: https://github.com/phpviet/number-to-words/pull/8
Bạn đổi sang dùng thư viện này nhé. Mình đang dùng chạy rất ổn luôn, quan trọng là giải quyết được lỗi bạn đang gặp phải.
Installation
Install this package via Composer.
composer require tnkemdilim/money-to-words-converter
Or edit your project's composer.json to require tnkemdilim/money-to-words-converter and then run composer update.
"require": { "tnkemdilim/money-to-words-converter": "^2" }
Example
For working example, checkout the Example folder.
Usage
Note: You should have composer's autoloader included require 'vendor/autoload.php'
Always include Converter namespace to your php file
Basic usage
use TNkemdilim\MoneyToWords\Converter;
// Nigerian currency : naira & kobo
$converter = new Converter("naira", "kobo");
echo ($converter->convert(374));
echo ($converter->convert(23.45));
echo ($converter->convert(748247284782));
echo ($converter->convert(748247284782.34));
echo ($converter->convert('34'));
echo ($converter->convert('2345.34'));
echo ($converter->convert('3453345'));
Other Languages
To convert money value to other languages, you'll need to import the Languages namespace
use TNkemdilim\MoneyToWords\Converter;
use TNkemdilim\MoneyToWords\Languages as Language;
$converter = new Converter("naira", "kobo", Language::FRENCH);
echo ($converter->convert(23.45));
echo ($converter->convert("748247284782"));
Convertion From Other Numeric System
Conversion from other numeric systems are supported in-built, and by default needs no extra configuration to convert into words.
Read more about Numeric systems.
// Chinese numeric system $money = "八百七十二万七千八百二十四";
// Example 1
$converter = new Converter("yen", "sen");
echo ($converter->convert($money));
// Example 2: but convert money value to french
$frenchConverter = new Converter("yen", "sen", Language::FRENCH);
echo ($frenchConverter->convert("八百七十二万七千八百二十四"));
Change Currency
To change the currency of the money to convert
// Dollars & Cents
$converter->setCurrency("dollar", "cents");
echo ($converter->convert(234.34)); // two hundred and thirty-four dollars, thirty-four cents only.
// Pounds & Pence
$converter->setCurrency("pounds", "pence");
echo ($converter->convert('23.3')); // twenty three pounds, 3 pence only.
Change Language Translation
Language for translation can be easily changed as follows. All available languages can be accessed via the TNkemdilim\MoneyToWords\Languages class.
See all available in Languages.
use TNkemdilim\MoneyToWords\Languages as Language;
$converter->setLanguage(Language::LATIN);
$converter->setLanguage(Language::SWAHILI);
$converter->setLanguage(Language::GREEK);
Supported Multi Languages
"tám nghìn" với "ba trăm" từ chỗ nào ra thế bro?
@hungpv em mới sửa lại ạ