修復PHP中的貨幣格式問題
P粉322319601
P粉322319601 2023-08-08 22:10:55
0
1
585
<p><code>numfmt_format_currency(new NumberFormatter('en',2), 31.005, "USD")</code> This code outputs $31.00. But it should output $gt; This code outputs $31.00. But it should output $gt; This code outputs $31.00. But it should output $31.01. Howue 3?這段程式碼輸出的是$31.00。但應該輸出$31.01。如何解決這個問題? ? </p><p>PHP在價格格式方面無視將0.005轉換成0.01。 </p><p>我嘗試修復Magento的貨幣格式問題,但在PHP方面找到問題</p><p><br /></p>
P粉322319601
P粉322319601

全部回覆(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: .01

這就是droopsnoot評論的內容

數字格式化預設模式和建立

如Olivier在評論中提醒的那樣,預設模式是半偶數舍入,也稱為銀行家舍入。

同時,他們指出使用類別常數NumberFormatter::CURRENCY會“更規範”,而不是使用魔術數字2

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

這將使您的程式碼更好地進行通信,否則數字2可能會被解讀為數字的位數或精度,但在這種情況下並非如此。您可以在PHP手冊中找到所有的樣式常數。

備註:這不只是PHP特有的問題,當您將這些數字傳遞給Javascript並且需要在Javascript中對它們進行格式化時,您會遇到相同的問題。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!