该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
关于
>>>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步是我自己加的,没有提示语法不对,不知道是什么原因算不出来,把第五步去掉就正常,但是最后一位没有四舍五入。。。。