如何停止/防止PHP在科学符号中自动格式化数字

如何停止/防止PHP在科学符号中自动格式化数字,php,Php,我想用php显示以下数字,但输出很奇怪: echo 3333333333333333333333333333333; // -----------> 3.3333333333333E+30 echo 0.000025; // -----------> 2.5E-5 我没有要求它转换。为什么会这样?我应该如何强制它完全按照我的要求获取/设置值?(另外,我听说过sprint\u f或number\u format函数,但我不喜欢它们,因

我想用php显示以下数字,但输出很奇怪:

echo 3333333333333333333333333333333;  // -----------> 3.3333333333333E+30
echo 0.000025;                         // -----------> 2.5E-5
我没有要求它转换。为什么会这样?我应该如何强制它完全按照我的要求获取/设置值?(另外,我听说过
sprint\u f
number\u format
函数,但我不喜欢它们,因为我必须事先知道格式和长度。)


更重要的是,当我试图在数据库中保存大量数字时,保存了一个数字:
2147483647
(我发现这是最大整数值)。我将列类型从
int
更改为
varchar(100)
,但仍然发生相同的截断。

查看php.ini中的精度设置


这个设置说明PHP将如何输出数字

查看PHP.ini中的精度设置


它的设置说明了当您使用这些极端数字(负数或正数)时,PHP将如何输出数字。PHP中数字系统的准确性将发挥作用

浮点数对于这样的数字是不准确的,我建议使用这里列出的其中一个


bc是专为小数设计的,当你使用这样的极端数字(负数或正数)时,php中数字系统的准确性就发挥了作用

浮点数对于这样的数字是不准确的,我建议使用这里列出的其中一个


bc是为小数设计的,好吧,我来回答我自己的问题

1) 第一个问题是PHP截断大值和最小值。。。但是,我解决了将值强制转换为字符串(使用双引号)的问题

2) 第二个问题有点奇怪。。。 当我第一次创建MySQL时,我将该列设置为
INT(11)
,然后将该列更改为
Varchar(100)
(与我的所有其他列都是
Varchar(100)
,它们可以很好地保存该值)


但是,该列再次截断了值。然后我重新创建了表,但更改了列名,然后它工作得很好!我想,MySQL缓存了列类型(或者肯定发生了类似的事情)

好吧,我来回答我自己的话题

1) 第一个问题是PHP截断大值和最小值。。。但是,我解决了将值强制转换为字符串(使用双引号)的问题

2) 第二个问题有点奇怪。。。 当我第一次创建MySQL时,我将该列设置为
INT(11)
,然后将该列更改为
Varchar(100)
(与我的所有其他列都是
Varchar(100)
,它们可以很好地保存该值)


但是,该列再次截断了值。然后我重新创建了表,但更改了列名,然后它工作得很好!我想,MySQL缓存了列类型(或者肯定发生了类似的事情)

显示如何创建值、如何将值传递到数据库以及表模式的代码。从技术上讲,它不是转换值。例如,
2.0E+2
是编写200的另一种方式。如果您想让数字在阅读时看起来好看,那么请使用数字格式化程序。
3333
大于PHP可以容纳的最大整数。你得到的是一个浮点数,它的精确度比你给出的要低。@mwweb的建议会有所帮助,但也要记住,您还需要将这些数字作为文本字段存储在数据库中。您需要如何处理这些数字?
var_dump(bcmul('3333333','1',99))
99是一个刻度,显示您如何创建值、如何将值传递到数据库以及表模式的代码。从技术上讲,它不是转换值。例如,
2.0E+2
是编写200的另一种方式。如果您想让数字在阅读时看起来好看,那么请使用数字格式化程序。
3333
大于PHP可以容纳的最大整数。你得到的是一个浮点数,它的精确度比你给出的要低。@mwweb的建议会有所帮助,但也要记住,您还需要将这些数字作为文本字段存储在数据库中。您需要如何处理这些数字?
var_dump(bcmul('3333333','1',99))99是标准如果你喜欢自己的答案,欢迎你接受。如果你喜欢自己的答案,欢迎你接受自己的答案。