本文目录一览:
PHP取余数 怎么取出来是负数
这个的确是PHP的BUG,参考文章内容如下:
我们先来看个例子.
$res = 16244799483;
echo $res%9999999;
// 输出结果为 -5069794, 正确的结果应该是4801107
其实这也算上PHP一个BUG吧.最主要是PHP是个弱类型语言.他内置了机器来判断用户的类型.
但是机器毕竟是机器.也有判断出错的时候.就像上面.所以这时候我们就需要人工干预下.
所以我就想到要用下面的方法来解决PHP整数取余返回负数的问题.
$res = floatval(16244799483);
var_dump($res % 9999999);
我们看到结果还是错误的-5069794.
但是值得注意的是返回是一个int类型的.
详细思考了一下.PHP整数取余返回负数的问题是这样处理的.
PHP取余默认为整数的.
而且当你定义$res = 16244799483;
其实就已经溢出了.所以要加上强制类型转换.变成float类型.
但是这样还不够.因为%这个取模计算还是针对整数的.
所以我们需要一个函数fmod.是针对float类型的.
所以最终PHP整数取余返回负数的解决办法为:
$res = floatval(16244799483);
var_dump(fmod($res,9999999));
这样我们就解决了PHP整数取余返回负数这个问题.
大体明白了吧,其实一般不会出现使用PHP做大量科学计算的~~
PHP 数组下标负数的问题
这是因为win下是32bit的环境,Linux用的是64位环境。
-2在32bit下的数据为0xFFFF FFFE
-2在64bit下的数据为0xFFFF FFFF FFFF FFFE
而你那未经考虑就直接在64bit下可会导致
得到0x0000 0000 FFFF FFFE得值4294967294
解决办法:根据-2的“产生算法”或“数据来源”作出修改或应对
比如加入
if(PHP_INT_SIZE===4){
//在32bit系统下怎么处理-2
}else{
//在64bit系统下怎么处理-2
}
请教一个PHP计算中负数的问题!
看不懂你想问什么。
1*(10-7)+2*(10-13)+3*(10-19)=1*3+2*0+3+0=3+0+0=3
这个表达式在语法上是不允许的。也有可能是我没理解你的意思。