首页 > 编程知识 正文

请教一个php计算中负数的问题(php负数转正数)

时间:2023-12-06 11:46:59 阅读:312598 作者:FURH

本文目录一览:

  • 1、PHP取余数 怎么取出来是负数
  • 2、PHP 数组下标负数的问题
  • 3、请教一个PHP计算中负数的问题!

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

这个表达式在语法上是不允许的。也有可能是我没理解你的意思。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。