我有一個小問題round()在PHP中。 我不知道,如果我真的說得對。 (它是一個訂單系統)如何整數金額正確? #Update 1
$量可以是十進制14,8 $價格可以是十進制10,5(數據庫)
我使用下面的這一刻 的$四捨五入價格爲一美元的金額
function round_amount($amount) {
return (float) round($amount, 8);
}
function round_price($amount) {
return (float) round($amount, 5);
}
//if some one have more decimal chars like 10.000000009
round_amount(10.000000009); //will be 10.00000001
//if some one have more decimal chars like 10.000009
round_price(10.000009); //will be 10.00001
//also this is possible
round_price(round_amount(10.000000009)*round_price(10.000009))
這種方式正確使用輪嗎? 某些用戶正在使用16位以上的小數。 我在用戶數據庫中扣除/添加結果。
但是我看到,有些用戶大概有5-10分錢!
解決此問題的唯一方法是隻允許8位和5位小數? 並警告用戶,如果他試圖使用更多? 但比我會得到與round_cur的問題(round_amount(10.000000009)* round_cur(10.000009))
我希望有人明白我的意思,或者可以告訴我,如果我的方式圓是正確的。
更新1
$amount = 10.12398413498579889173459873;
$price = 5.1938457198347695;
echo round_cur(round_amount($amount)*round_cur($price))."<br />";
echo round_cur($amount*$price);
//returns
//52.58245
//52.58241
有趣!
什麼是round_cur(round_amount(10.000000009)* round_cur(10.000009))?你的意思是round_price? – MIIB 2013-03-01 19:44:16
當然,改變了!對不起 – DjangoSi 2013-03-01 19:45:44
我真的取決於你的使用情況。例如,您似乎很奇怪,儘管你提了'round_cur'功能,但不顯示的定義和你的'round_amount(10.0000009)'例子應該返回10.0000009因爲傳遞給函數的值比'round_amount'函數指定精度要求不高。現在,無論是乘號在一起,然後他們周圍還是以首輪他們是嚴格意義上的商業邏輯的決定。 – 2013-03-01 19:49:00