一亩三分地

 找回密码 注册账号

扫描二维码登录本站


Salarytics=Salary Analytics
查询工资数据
系统自动计算每年收入

科技公司如何
用数据分析驱动产品开发
coupon code 250off 立减$250

深入浅出AB Test
从入门到精通
coupon code 250off 立减$250
游戏初创公司招聘工程师、UIUX Designer和游戏策划
坐标湾区
DreamCraft创始团队
招聘游戏开发工程师
把贵司信息放这里
查看: 1233|回复: 8
收起左侧

[学Python/Perl] python的负数整除问题。

[复制链接] |试试Instant~ |学python/perl, 刷题
我的人缘0

分享帖子到朋友圈
whodatj | 显示全部楼层 |阅读模式
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   90% (20)
 
 
9% (2)    👎

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?注册账号

x
PYTHON负数除法。用'//'符号进行除法的话。自动向下取整。但是其他语言好像都是向上取整?
比如
python 5//-3 == -2
java      5//-3 == -1 ?
那么问题来了。python中使用int( 5 / -3 ) == -1  就可以完全和其他语言统一了吗?向上取整

评分

参与人数 1大米 +3 收起 理由
14417335 + 3

查看全部评分


上一篇:求推荐巩固算法的书籍或者网站。
下一篇:西雅图downtown的朋友一般在哪刷题呢?
我的人缘0
kuboy 2019-7-17 09:07:38 | 显示全部楼层
本楼: 👍   100% (2)
 
 
0% (0)   👎
全局: 👍   93% (428)
 
 
6% (28)    👎
各种语言都有自己的定义吧,python中:
int(),向 0 取整。

round(),银行进位法,四舍六入五取偶。
>>> round(-2.5), round(-1.5), round(1.5), round(2.5)
-2 -2 2 2

math.floor(),向下取整,找大的。

math.ceil(),向上取整,找小的。

斜杠 / ,总是返回一个浮点数。

双斜杠// ,地板除 ,只保留整数部分,向下取整。得到的并不一定都是整数类型的数,它与分母分子的数据类型有关系,如果分子或分母有浮点型,结果就是浮点型

>>> -2.5//2, -1.5//2, 1.5//2, 2.5//2
           -2.0       -1.0          0.0          1.0

补充内容 (2019-7-18 09:06):
有点错误,向下取整是取小向上取整是取大,如 math.floor(-2.5) 向下取整是 -3 ,math.ceil(-2.5) 向上取整是 -2,地板除 // 是只要结果为正数,就保留整数部分结果是负数,就向下取整,如 -2.5//2 结果是 -2.0

评分

参与人数 4大米 +6 收起 理由
thunder + 2 很有用的信息!
ibio + 1 赞一个
ncy + 1 赞一个
jane19930412 + 2 很有用的信息!

查看全部评分

回复

使用道具 举报

我的人缘0
imagebreaker 2019-7-17 08:06:41 | 显示全部楼层
本楼: 👍   100% (1)
 
 
0% (0)   👎
全局: 👍   100% (6)
 
 
0% (0)    👎
我觉得不行吧,5/-3还是一个整数,对它进行int也不会返回-1
或者你试试int(float(5)/-3)

我在Stackoverflow上找到的解释:
https://stackoverflow.com/questi ... -by-negative-number
回复

使用道具 举报

我的人缘0
eagleoflqj 2019-7-17 09:13:14 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (14)
 
 
0% (0)    👎
def f(a,b):
    return (1 if a*b>0 else -1)*(abs(a)//abs(b))

评分

参与人数 1大米 +1 收起 理由
helloworld27 + 1 给你点个赞!

查看全部评分

回复

使用道具 举报

我的人缘0
 楼主| whodatj 2019-7-17 09:43:56 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   90% (20)
 
 
9% (2)    👎
imagebreaker 发表于 2019-7-17 08:06
我觉得不行吧,5/-3还是一个整数,对它进行int也不会返回-1
或者你试试int(float(5)/-3)

int(5/-3)就是-1阿
回复

使用道具 举报

我的人缘0
337845818 2019-7-17 21:49:07 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   81% (699)
 
 
18% (162)    👎
回复

使用道具 举报

我的人缘0
floatingpoints 2019-7-18 02:10:04 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   66% (8)
 
 
33% (4)    👎
imagebreaker 发表于 2019-7-17 08:06
我觉得不行吧,5/-3还是一个整数,对它进行int也不会返回-1
或者你试试int(float(5)/-3)

python2里面 5/-3是整数,但是python3里面不是。。。。
回复

使用道具 举报

我的人缘0
helloworld27 2019-7-18 08:16:18 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   100% (14)
 
 
0% (0)    👎
整数计算中加入浮点运算容易出现浮点误差。假如运算结果特别大,可能会出问题。可以试试这个:

[Python] 纯文本查看 复制代码
def divide(a, b):
  return (a - a%abs(b))//b if a > 0 else (a + a%abs(b))//b


简单测试了一下没有问题:

[Python] 纯文本查看 复制代码
for i in range(-3, 4):
  for j in range(-3, 4):
    if j != 0:
      print("%d\t%d\t%d\t" % (i, j, divide(i, j)))


[Java] 纯文本查看 复制代码
public class Main {
    public static void main(String[] args) {
        for (int i = -3; i <= 3; i++) 
          for (int j = -3; j <= 3; j++)
            if (j != 0)
              System.out.println("" + i + "\t" + j + "\t" + i/j); 
    }

}


P.S. 楼上的代码似乎更简洁
回复

使用道具 举报

我的人缘0
jaychsu 2019-7-18 17:31:04 | 显示全部楼层
本楼: 👍   0% (0)
 
 
0% (0)   👎
全局: 👍   97% (345)
 
 
2% (8)    👎
前面的都太麻烦,这个有个优雅又 tricky 的做法

[Python] 纯文本查看 复制代码
-1 * -3 // 2 * -1  # -1
-1 * 3 // -2 * -1  # -1
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号

本版积分规则

隐私提醒:
■为防止被骚扰甚至人肉,不要公开留微信等联系方式,请以论坛私信方式发送。
■特定版块可以超级匿名:https://pay.1point3acres.com/tools/thread
■其他版块匿名方法:http://www.1point3acres.com/bbs/thread-405991-1-1.html

手机版||一亩三分地

GMT+8, 2019-12-11 12:58

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表