python做除法有不精确的尾数_python除法运算的一点讨论,大神指点一个问题没有解决。谢谢。。...

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

关于

>>>10%-3

-2

理解:10/-3=-3.3333333

整除后向下圆整

10//-3=-4

求余10-(-3)*(-4)=-2

>>>-10%3

2

理解:-10/3=-3.3333333

整除后向下圆整

-10//3=-4

求余(-10)-3*(-4)=2

老是对这个python求除法如6/9=0.6666666666666666 10/3=3.3333333333333335等不正确感到无法理解,然后发现不是只有python这样,其余的语言如java等也是这样,使用时只要在限定位数里面下个限定就好了。。。

>>> round(6/9,15)

0.666666666666667

>>> round(10/3,15)

3.333333333333333

当然前提是小数后面要小于16位,如果不小于16位超过了精度还是一样的结果,与语言无关,是cpu的运算底层的问题。

那如果非要得到不小于16位以上的正确小数结果呢?那只能通过一个流程来处理了。。。

# -*-coding: utf-8-*-

while 1:

try:

a,b = eval(input("请输入2个整数,用英文半角逗号隔开:"))

if b == 0:

raise Exception

n= int(input("请输入要达到的小数位数:"))

break

except:

print("输入错误,除数不能为0或者逗号为中文全角逗号,请重新输入")

#2,计算商和余数

s= a//b#取商的整数部分

r = a%b

#取余数

print("经过计算,商是:",s,"余数是:",r)

#3,如果有余数,则继续计算得到指定的小数位数为止

if r == 0:

print("{}除以{}能够整除,结果为{},无小数位数。".format(a,b,s))

else:#如果有余数则继续计算

xs = str(s)+"."#先设置小数的整数部分及小数点

xs1 = ""#初始化小数位

#4,设置循环条件为小数位数不足指定位少一位数

while len(xs1)

r = r*10#余数增大10倍,再除以b

xs2 = r//b

xs1 = xs1 + str(xs2)#得到的整数部分写入小数位置

r = r%b#继续取余数

#5,处理最后一位小数4舍5入

while len(xs1)

r = r*10#余数增大10倍,再除以b

xs4 = r//b

xs3 = xs1 + str(xs4)#得到的整数部分写入小数位置

r = r%b#继续取余数

xs5 = xs3[n:1]

xs6 = xs3[(n+1):1]

xs6 = int(xs6)

if xs6<5:

xs5 = xs5

else:

xs5 = xs5 + 1

xs1 = xs1+str(xs5)

#6,输出结果

print("python直接计算%d除以%d的值为:%s" %(a,b,a/b))

print("指定保留%d位小数的值为:%s"%(n,(xs+xs1)))

内容都是百度的,最后的那个第5步是我自己加的,没有提示语法不对,不知道是什么原因算不出来,把第五步去掉就正常,但是最后一位没有四舍五入。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值