使用函数调用方式解决:输入三个正整数a,b,n,求a/b精确到小数后第n位。

计算机在计算除法时,如果不能整除,会得到一个精确度有限的小数,但我们可以通过字符串的方式突破精度显示限制

一、分析结构

  • 形参:a,b,n
  • 分别对应:被除数,除数,精确的小数位
  • 概要:计算每一位的值后通过字符串形式拼接为结果

二、解决问题

1.定义函数

def _precise(a, b, n):

2.定义变量s(结果)并赋初值(即:字符串开头,例如:3.1415926…开头为“ 3. ”),整数部分即为a//b(取整部分)

s = str(a // b) + '.'

3.定义余数r

r = a % b

4.定义循环步进i

i = 0

5.定义循环来计算期望精度值,每一次循环计算一位小数(也可以在i<n后加上“and r != 0”,来确保在余数为0时停止循环)

while i < n:

6.编写循环体:
余数r = a % b,在第一次循环时将r(余数)扩大十倍后再除以b(除数)取整后得到第一位小数(以字符串拼接的形式拼接给s)
例:
20 / 3 第一次循环时等于:“6.” + “6”,第一次结束后s=“6.6”(字符串形式)

r = r * 10
s = s + str(r//b)

7.每次循环后,r又会获得新的值(即:原来的r * 10后除以 b余数)
例:还是拿上面的20/3举例,第一次循环时r = 2 * 10=20,除以b(也就是3)后,得到第一位小数6并且余下2,执行完**s = s + str(r//b)**后r = 20 % 3 = 2,然后等待下一次循环开始

r = r % b

8.设置步进i,循环体完成
例:比如用户输入的n = 10,i每次加1,加到9时停止,从0-9刚好10次循环,每次循环执行一次步骤6和7求出一位小数,10次刚好精确到第十位停止。

i = i + 1

9.最后输出s即可

print(s)

三、完整代码

def _precise(a, b, n):
    s = str(a // b) + '.'
    i = 0
    r = a % b
    while i < n:
        r = r * 10
        s = s + str(r//b)
        r = r % b
        i = i + 1
    print(s)

#举例调用函数
_precise(6, 7, 6)
#即6除7取6位小数
#结果为	0.857143
  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值