2017-06-22 124 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。 –