php str_replace 将整数转换为科学数

Posted

技术标签:

【中文标题】php str_replace 将整数转换为科学数【英文标题】:php str_replace casting integer to scientific number 【发布时间】:2015-02-12 18:05:31 【问题描述】:

我的网络服务器上的 str_replace 确实存在将整数转换为科学数字表示法的问题。

$strContent = "Yesterday was ##yesterdayTimestamp##!";
$yesterDayTimestamp = floor((time() - (24 * 3600)) / (24 * 3600)) * 24 * 3600 * 1000 ;
$strContent = str_replace("##yesterdayTimestamp##", $yesterDayTimestamp, $strContent) ;

echo $strContent;

// expected output / result on local server
// "Yesterday was 1423612800000!"

// result on remote production server
// "Yesterday was 1.4236128E+12!"

尝试使用str()format_number() 解决问题似乎不起作用

如何防止 php 在代码中使用科学记数法?

我通过更改 php 配置找到了问题的解决方案,例如:PHP Scientific Notation Shortening。 但是,由于我在托管环境中,这并不容易。

【问题讨论】:

现在的问题是什么?你期望/想要什么输出? (顺便说一句:您的计算似乎有点奇怪,您只是将时间戳乘以 1000?!) 您使用的是 32 位 PHP,并且您计算的数字大大超过了最大可表示整数,即 2**31 - 1。浮点数是您的值可以表示的唯一方式。跨度> 看起来您正在使用毫秒时间戳。 PHP 时间戳以 SECONDS 为单位,因此您的输出比您需要的大 1000 倍。如果您想要昨天的时间戳,为什么不直接time() - 86400 认为数学公式与问题无关。它正是我需要的方式。我数据库中的日期存储为微秒,因为我需要它来避免冲突。 【参考方案1】:

只要有效数字少于 14 位,printf(%f) 就可以很好地工作:

$big = 1234567890123456;
echo $big, "\n";         # 1.2345678901235E+15
printf("%.0f\n", $big);  # 1234567890123456

如果您需要更多,请考虑 BCMath/GMP

【讨论】:

thx georg,这是朝着正确的方向发展,但是我需要将其正确替换为 $strContent,因此我无法使用 printf @Manuel:你需要一个字符串,试试sprintf

以上是关于php str_replace 将整数转换为科学数的主要内容,如果未能解决你的问题,请参考以下文章

以科学计数法将字符串转换为整数

在 Notepad++ 中使用正则表达式将科学记数法转换为文本或整数

如何将一串大数转换为整数?

PHP如何将从二进制文件中读取的字节转换为数字

将具有科学计数法的字符串列表转换为十进制数

将科学计数法中的十进制数转换为 IEEE 754