php和mysql中数字最大限制的主要目的是什么? 这是否意味着我们可以/不能处理或存储大于限制的数字?
我回复PHP_INT_MAX
并显示2147483647
。
我乘以1000000000000000000000
并获得2.147483647E+30
之类的答案,我认为已超出限额?
请告知。
非常感谢您的指导。
当我考虑验证用户表单输入时,会出现此问题。我想确保用户输入是根据我们定义的数字格式而不是其他内容 然后我做一些在线搜索最佳实践,并了解这个“限制”,但不知道如何正确处理它使用PHP& MYSQL。请指教:
步骤1:修剪并将用户表单输入“字符串编号”转换为数字
第2步:验证数字是否为正整数格式
第3步:验证号码是否超过我的“最大限额”
由于php限制(2,147,483,647)小于mysql限制(18,446,744,073,709,500,000)?我将把php作为我的最大限制
第4步:进行一些计算......
第5步:验证我的结果不超过我的最大限制
第6步:将结果存储在mysql中。
答案 0 :(得分:3)
答案 1 :(得分:1)
PHP_INT_MAX
是您可以在此PHP版本中使用的最大integer
的常量(在您的情况下为32位)。如果您的操作系统和CPU支持64位,则可以使用64位版本的PHP来支持整数中更大的数字。 (这会导致开发人员将代码设计为64位构建限制的问题,然后在32位构建中使用,假设类型很重要。)
当您将数字乘以较大数字时,PHP会识别出此新值不适合integer
并将类型转换为long
或float
。在后一种情况下,您会失去一些精确度,因此在考虑代码如何影响变量类型时,请务必小心。在某些语言中,如果尝试设置的值大于该类型允许的值,则会收到错误,因为语言会拒绝自动更改类型。通过这种方式,PHP是一种更基本的编程语言。
<?php
$my_number = PHP_INT_MAX;
var_dump(gettype($my_number), $my_number);
$my_number = $my_number * 1000000000000000000000;
var_dump(gettype($my_number), $my_number);
Output:
string(7) "integer"
int(2147483647)
string(6) "double"
float(2.147483647E+30)
答案 2 :(得分:0)
在计算领域,基于我们使用的计算机硬件的数学模型存在许多限制。
例如,如果我们决定在1位内存中表示整数,那么我们就可以表示数字0和1。
如果我们将其增加到8
,16
,32
或64 bits
的更常见值,那么我们可以表示以下数量的不同值:< / p>
2^8 - 256
,2^16 - 65,536
,2^32 - 4,294,967,296
,2^64 - 18,446,744,073,709,551,616
。当然,如果我们希望能够表示负数,那么我们可以对整数进行符号(使用一位表示负数或正数)。在32 bit signed integer
的情况下,这可以让我们代表数字:−(2^31)
到2^31 − 1
或-2,147,483,648
到+2,147,483,647
(与数字相同的上限)在你的问题中)。
整数可以说是计算机系统中最简单的数字表示形式(超出直接二进制),但由于系统的固有限制,我们经常需要使用其他系统来处理我们无法用整数表示的更大数字。当超过限制时,PHP将从使用整数切换到使用floating point numbers。
您在PHP中看到的限制是编译的,并且将取决于编译器的体系结构。看起来你的PHP编译为32位。
您可以在computer number systems on Wikipedia上阅读更多内容。