2017-06-22 120 views
0

我在格式化小數面臨的一個問題,假設我可以有兩個十進制數,其中小數可18位之前或之後,格式,如:十進制數字格式化問題

$num1 = 12345678912345678912345.52458 

$num2 = 123.54893256666666 

對上述兩個號碼我的期望是出在條件基礎,是

爲$ NUM1: 如果小數點自帶18位經過這麼小數點應該只是18digit後和2位是作爲一個精確唯

爲$ NUM2: 如果小數點自帶18位之前,所以小數應該是因爲它的位置,但精度應該是

所需的出小數

後只有2位:

$num1 = 123456789123456789.00 
$num2 = 123.54 

我有與數number_format()嘗試這樣象下面這樣:

<?php 
    $num1 = 12345678912345678912345.52458; 
    $num2 = 123.54893256666666; 
    $num1 = number_format($num1,2,'.',''); //it is not working 
    $num2 = number_format($num2,2,'.',''); //it is working 
    echo $num1."<br>".$num2; 

輸出:

for $num1 = 12345678912345679593472.00 where it should comes like 123456789123456789.00 

for $num1 = 123.55 that is ok 

請幫我沒有得到如何爲什麼你需要大量使用number_format()爲$ NUM1

+1

PHP不能處理這個問題是很大的數字。做一個'echo PHP_INT_MAX;'並查看系統中的最大大小(根據使用32位還是64位版本而有所不同)。 –

+0

但我的號碼是十進制的?將'PHP_INT_MAX'工作 –

+0

是的。數字是數字。否則,如果你只是需要在一個太大的整數後加上一個「.0」,那就不成問題了。 –

回答

0

? 默認情況下php支持14位數字。例如

$num = 12345678122222; 
if (strpos($num, '.') !== false) { 
    echo 'true'; 
}else 
    echo 'false'; 

如果你寫的代碼,它會響應錯誤是正確的,但如果你添加一個數字,以$ NUM那麼PHP將不能正確地處理它。

對你而言,小數點後兩位數。請參閱此鏈接 它已經回答

PHP: show a number to 2 decimal places

+0

PHP中整數的最大大小並不總是相同。這取決於你是否運行32-。或64位版本的PHP。儘管如此,即使是64位系統,OP的數量也是很大的。 –

+0

是的你是對的。但我有64位操作系統,目前只能使用14位數字。 –

+0

當然,但您還需要擁有64位版本的PHP。 –