十进制数格式问题

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。

以上是关于十进制数格式问题的主要内容,如果未能解决你的问题,请参考以下文章

在 C# 中格式化十进制数

以(已知)国家格式验证十进制数

对十进制数使用自定义字符串格式c#

如何通过 JOptionPane 格式化十进制数的输出

使用 jquery 和 regex 格式化正负十进制数

负十进制数/字符串到 IEEE 单精度格式