當我做在PHP以下乘法:顯示浮點值的w/o科學記數法
$ret = 1.0 * 0.000000001;
我得到的結果是:1.0E-9
我想這個結果轉換成十進制正常記譜法,我怎麼能做到這一點?
sprintf('%f',$ret)
不起作用,它返回0.000000
。溢出?
當我做在PHP以下乘法:顯示浮點值的w/o科學記數法
$ret = 1.0 * 0.000000001;
我得到的結果是:1.0E-9
我想這個結果轉換成十進制正常記譜法,我怎麼能做到這一點?
sprintf('%f',$ret)
不起作用,它返回0.000000
。溢出?
sprintf('%f',$ret)
不起作用,它返回0.000000
。溢出?
sprintf
工程,但是你錯過了這裏的一些觀點。
0.000000
不溢出。這只是sprintf
對於%f
修飾符默認情況下使用6位數字。請注意,%f
是現場感知,%F
可能更適合。
您可能想要使用更多數字,例如讓我們說400萬(400萬):
$ php -r "printf('%.4000000F', 1*0.000000001);"
Notice: printf(): Requested precision of 4000000 digits was truncated to PHP maximum of 53 digits in Command line code on line 1
Call Stack:
0.0001 319080 1. {main}() Command line code:0
0.0001 319200 2. printf() Command line code:1
0.00000000100000000000000006228159145777985641889706869
這個例子說明,存在不僅是一種常見的值(6位數字),而且最大的(可能依賴於計算機系統PHP執行上),在這裏正如警告所示,在我的情況下截斷爲53位數字。
因爲你的問題我說你想要顯示:
0.000000001
哪些是九位,所以你需要它這樣寫:
sprintf('%.9F',$ret)
但是,您可能希望要做到這一點:
rtrim(sprintf('%.20F', $ret), '0');
將從事後收屍零:
0.000000001
希望這是有幫助的。
您需要添加精度說明符(應該爲浮點數顯示多少個小數位數)。事情是這樣的:
echo sprintf('%.10f',$ret); // 0.0000000010
如果你不知道什麼號碼,你應該指定,只要給它一個很大的數字,並與rtrim()
結合起來。
echo rtrim(sprintf('%.20f', $ret), '0'); // 0.000000001
上述代碼將從字符串的末尾中去掉任何0
的。
要與系統的設置和限制保持一致,您可以使用serialize_precision
以獲得最準確的結果。
echo rtrim(sprintf('%.'.ini_get('serialize_precision').'f', $ret));
我不建議使用非語言環境感知%F
因爲你的問題纔有意義,爲了顯示的目的。尊重語言環境可以提供更好的用戶體驗。
你是老大。一直在整個互聯網上尋找這個。 – Peibol
當我找到這個答案後,我花了一些時間進行研究,這是最好的答案。你可以自由地使用它們。 – Kainax
使用'sprintf'頂部的'rtrim'就像一個魅力。 –