Asked Sep 8th, 7:09 AM 174 0 2
  • 174 0 2
0

Đọc từ số sang chữ trong laravel

Share
  • 174 0 2

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']);

Sep 8th, 7:12 AM

"tám nghìn" với "ba trăm" từ chỗ nào ra thế bro?

0
| Reply
Share
Sep 8th, 7:15 AM

@hungpv em mới sửa lại ạ

0
| Reply
Share

2 ANSWERS


Answered Sep 9th, 6:56 AM
0

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

Share
Sep 9th, 11:12 AM

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 ạ.

0
| Reply
Share
Avatar Phát Nhâm @phatnham
Sep 9th, 8:01 PM

@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

0
| Reply
Share
Answered Sep 19th, 3:27 AM
0

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.

// https://dientukhaihoan.vn/

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

Share
Viblo
Let's register a Viblo Account to get more interesting posts.