十进制数格式问题
Posted
技术标签:
【中文标题】十进制数格式问题【英文标题】:decimal number formatting issue 【发布时间】:2017-06-22 05:28:26 【问题描述】:我在格式化十进制数时遇到问题,假设我可以有两个十进制数,其中十进制数可以在第 18 位之前或之后,格式如下:
$num1 = 12345678912345678912345.52458
$num2 = 123.54893256666666
对于以上两个数字,我想要的结果是基于
$num1: 如果小数点在第 18 位之后,那么小数点应该在 18 位之后,并且在这 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
请帮助我不知道如何为 $num1 使用 number_format()
【问题讨论】:
PHP 无法处理那么大的数字。执行echo PHP_INT_MAX;
并查看系统的最大大小(取决于您使用的是 32 位还是 64 位版本)。
但我的数字是十进制的?将PHP_INT_MAX
工作
是的。数字就是数字。否则,如果您只需要在一个太大的整数后添加一个.0
,那将不是问题。
它给了我结果 2147483647
那么您正在运行 32 位版本的 PHP,这是它可以处理的最大数量。为什么你需要一个这么大的数字,开始?它来自哪里,你想做什么?
【参考方案1】:
为什么需要这么大的数字? 默认情况下,php 支持 14 位数字。例如
$num = 12345678122222;
if (strpos($num, '.') !== false)
echo 'true';
else
echo 'false';
如果您编写该代码,它会回显错误,这是正确的,但如果您向 $num 添加一个数字,那么 php 将无法正确处理它。
还有小数点后两位数。看到这个链接 已经回答了
PHP: show a number to 2 decimal places
【讨论】:
PHP 中整数的最大大小并不总是相同的。这取决于您是否正在运行 32-。或 64 位版本的 PHP。但是,即使对于 64 位系统,OP 的数量也太大了。 是的,你是对的。但我有 64 位操作系统,目前它只能使用 14 位。 当然可以,但是您还需要有 64 位版本的 PHP。以上是关于十进制数格式问题的主要内容,如果未能解决你的问题,请参考以下文章