Yêu cầu thg 9 8, 2021 7:09 SA 308 0 2
  • 308 0 2
0

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

Chia sẻ
  • 308 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']);

thg 9 8, 2021 7:12 SA

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

thg 9 8, 2021 7:15 SA

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

2 CÂU TRẢ LỜI


Đã trả lời thg 9 9, 2021 6:56 SA
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

Chia sẻ
thg 9 9, 2021 11:12 SA

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

Avatar Phát Nhâm @phatnham
thg 9 9, 2021 8:01 CH

@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

Đã trả lời thg 9 19, 2021 3:27 SA
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

Chia sẻ
Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí