Problem mit dem Währungsformat in PHP behoben
P粉322319601
P粉322319601 2023-08-08 22:10:55
0
1
549

numfmt_format_currency(new NumberFormatter('en',2), 31,005, "USD") Dieser Code sollte 31,01 $ ausgeben. Dieser Code gibt 31,00 $ aus. Es sollten aber 31,01 $ ausgegeben werden. Wie kann dieses Problem gelöst werden? ?

PHP ignoriert die Konvertierung von 0,005 in 0,01 im Preisformat.

Ich habe versucht, das Währungsformatierungsproblem von Magento zu beheben, habe aber ein Problem mit PHP festgestellt.


P粉322319601
P粉322319601

Antworte allen (1)
P粉275883973

31.005实际上在两个数字之间,请查看https://php.net/float上的浮点精度。

> ini_set('precision', 23) = "14" > 31.005 = 31.00499999999999900524

(在PHP和其他语言中,没有31.005这个数字。.)

你需要提供足够精度的数字,但要尽可能少地出现误差,以匹配你的显示要求。这可以通过指定舍入模式来实现,例如,如果你想将31.005四舍五入到31.01,你可以选择向上舍入或向下舍入。

$formatter = new NumberFormatter('en', NumberFormatter::CURRENCY); $formatter->setAttribute( NumberFormatter::ROUNDING_MODE, NumberFormatter::ROUND_HALFUP ); echo $formatter->formatCurrency(31.005, 'USD'), "\n"; # Output: $31.01

这就是droopsnoot评论的内容

数字格式化默认模式和创建

如Olivier在评论中提醒的那样,默认模式是半偶数舍入,也称为银行家舍入。

同时,他们指出使用类常量NumberFormatter::CURRENCY会“更加规范”,而不是使用魔术数字2

$formatter = new NumberFormatter('en', 2); $formatter = new NumberFormatter('en', NumberFormatter::CURRENCY);

这将使您的代码更好地进行通信,否则数字2可能会被解读为数字的位数或精度,但在这种情况下并非如此。您可以在PHP手册中找到所有的样式常量。

备注:这并不只是PHP特有的问题,当您将这些数字传递给Javascript并且需要在Javascript中对它们进行格式化时,您会遇到相同的问题。

    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!