【发布时间】:2018-08-01 04:27:29
【问题描述】:
我一直在寻找将我的指数数字字符串转换为精确数字的方法。 所以,我有一个指数数字存储在 MySQL 中的字符串。我想以确切的数字转换回这个字符串。 但似乎这个数字很大,而且越界了,给我提供了错误的数据。
虽然我尝试了各种格式的代码,但结果格式不正确。
policy_number = "2.9992020830803E+18";
number_format($policy_number, 0,'.','');
// Output
2999202083080300032
(float) $policy_number;
// Output
2.9992020830803E+18
sscanf($policy_number, "%f")[0];
// Output
2.9992020830803E+18
floatval($policy_number);
// Output
2.9992020830803E+18
gmp_init("2.9992020830803E+18");
gmp_strval($policy_number);
// Output
0
"2.9992020830803E+18" + 0;
// Output
2.9992020830803E+18
请告诉我转换它的正确方法。
【问题讨论】:
-
那么,您究竟试图得到什么作为输出?如果你将一个大整数存储为一个数字,而它应该是一个字符串——我猜你这样做了,基于变量名——你不能可靠地“转换回”为整数.当您以数字格式存储信息时,您会丢失信息。
-
我试图获得 2999202083080300000。如果您在我的第一次尝试中看到它给出了额外的 32,不知道为什么?
-
如果您总是希望数字以零结尾,那么将其转换为字符串是微不足道的。但是,正如我已经建议的那样,这里真正的解决方案是将数据存储为字符串,而不是数字。毕竟,如果这是一个标识符号,您对 amount 不感兴趣;你对特定的数字串感兴趣。您应该相应地存储数据。
-
感谢您的回复。我在这里有点困惑。看,我已经将这个 policy_number 存储在 MySQl 中,它是一个 Varchar。 (我无法将其更改为任何其他数据类型,因为它可能在保单编号中也有 char)。现在我正在尝试从 Mysql 中检索它并希望在 HTML 上展示。由于数字在 MYSQL 中已经是指数格式,我尝试使用 number_format 函数进行转换。当我使用 PHP 时,相信它会关心数据类型本身。就 MySQL 而言,我无法更改值输入,因为它已经是指数格式。
-
Varchar 是一种合理的列数据类型。您的问题似乎是您在保存到数据库或检索它时不小心将其转换为数值。不可能说是哪个,因为你没有提供任何代码。无论如何,这是XY problem 的明显实例;您必须解决的真正问题不是将指数符号中的数字转换为简单的整数,而是首先避免将数据放入该格式。
标签: php string numbers exponential