【问题标题】: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,这是它可以处理的最大数量。为什么你需要一个这么大的数字,开始?它来自哪里,你想做什么?

标签: php number-formatting decimalformat


【解决方案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。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-13
  • 1970-01-01
  • 2013-02-27
  • 1970-01-01
  • 2020-02-19
相关资源
最近更新 更多