鱼C论坛

 找回密码
 立即注册
查看: 953|回复: 2

[已解决]python保留小数位数问题

[复制链接]
发表于 2024-5-9 17:17:48 | 显示全部楼层 |阅读模式
15鱼币
python中如何将数据不舍只入保留两位小数,且小数的末位为5或0,比如37.931变为37.95;37.372变为37.40;403.7823变为403.80;1075.8996变为1075.90
最佳答案
2024-5-9 17:17:49
本帖最后由 jackz007 于 2024-5-11 00:06 编辑
  1. def foo(f) :
  2.     v = f * 100
  3.     d = v % 10
  4.     if d % 5 :
  5.         v = (v // 10) * 10 + 5 if d < 5 else ((v // 10) + 1) * 10
  6.     return v / 100   

  7. while True :
  8.     s = input('请输入一个浮点数:')
  9.     if s :
  10.         print('%.2f\n' % foo(eval(s)))
  11.     else :
  12.         break
复制代码

        运行实况:
  1. D:\[exercise]\Python>python x.py
  2. 请输入一个浮点数:37.931
  3. 37.95

  4. 请输入一个浮点数:37.372
  5. 37.40

  6. 请输入一个浮点数:403.7823
  7. 403.80

  8. 请输入一个浮点数:1075.8996
  9. 1075.90

  10. 请输入一个浮点数:

  11. D:\[exercise]\Python>
复制代码

最佳答案

查看完整内容

运行实况:

本帖被以下淘专辑推荐:

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-5-9 17:17:49 | 显示全部楼层    本楼为最佳答案   
本帖最后由 jackz007 于 2024-5-11 00:06 编辑
  1. def foo(f) :
  2.     v = f * 100
  3.     d = v % 10
  4.     if d % 5 :
  5.         v = (v // 10) * 10 + 5 if d < 5 else ((v // 10) + 1) * 10
  6.     return v / 100   

  7. while True :
  8.     s = input('请输入一个浮点数:')
  9.     if s :
  10.         print('%.2f\n' % foo(eval(s)))
  11.     else :
  12.         break
复制代码

        运行实况:
  1. D:\[exercise]\Python>python x.py
  2. 请输入一个浮点数:37.931
  3. 37.95

  4. 请输入一个浮点数:37.372
  5. 37.40

  6. 请输入一个浮点数:403.7823
  7. 403.80

  8. 请输入一个浮点数:1075.8996
  9. 1075.90

  10. 请输入一个浮点数:

  11. D:\[exercise]\Python>
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2024-5-9 17:18:10 | 显示全部楼层
在Python中,可以使用内置的round函数来实现数字的四舍五入,并且可以通过格式化字符串来控制小数位数。

下面是一个示例代码:

  1. def round_number(num):
  2.     # 先将数字保留两位小数并四舍五入
  3.     rounded_num = round(num, 2)
  4.    
  5.     # 将保留两位小数后的数字转为字符串
  6.     num_str = str(rounded_num)
  7.    
  8.     # 如果小数部分为空,直接返回
  9.     if '.' not in num_str:
  10.         return num_str
  11.    
  12.     # 获取小数部分的末尾数字
  13.     decimal_part = num_str.split('.')[1]
  14.     last_digit = int(decimal_part[-1])
  15.    
  16.     # 判断末尾数字是否为5或0,如果是则直接返回保留两位小数后的数字
  17.     if last_digit == 5 or last_digit == 0:
  18.         return num_str
  19.    
  20.     # 如果末尾数字大于5,则向上进位
  21.     if last_digit > 5:
  22.         rounded_num += 0.05
  23.    
  24.     # 如果末尾数字小于5,则向下取整
  25.     if last_digit < 5:
  26.         rounded_num -= 0.05
  27.    
  28.     # 再次保留两位小数并四舍五入
  29.     rounded_num = round(rounded_num, 2)
  30.    
  31.     return str(rounded_num)
复制代码


使用示例:

  1. print(round_number(37.931))   # 输出:37.95
  2. print(round_number(37.372))   # 输出:37.40
  3. print(round_number(403.7823)) # 输出:403.80
  4. print(round_number(1075.8996))# 输出:1075.90
复制代码


希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-22 18:42

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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