wangye666 发表于 2024-5-9 17:17:48

python保留小数位数问题

python中如何将数据不舍只入保留两位小数,且小数的末位为5或0,比如37.931变为37.95;37.372变为37.40;403.7823变为403.80;1075.8996变为1075.90

jackz007 发表于 2024-5-9 17:17:49

本帖最后由 jackz007 于 2024-5-11 00:06 编辑

def foo(f) :
    v = f * 100
    d = v % 10
    if d % 5 :
      v = (v // 10) * 10 + 5 if d < 5 else ((v // 10) + 1) * 10
    return v / 100   

while True :
    s = input('请输入一个浮点数:')
    if s :
      print('%.2f\n' % foo(eval(s)))
    else :
      break
      运行实况:
D:\\Python>python x.py
请输入一个浮点数:37.931
37.95

请输入一个浮点数:37.372
37.40

请输入一个浮点数:403.7823
403.80

请输入一个浮点数:1075.8996
1075.90

请输入一个浮点数:

D:\\Python>

FishC 发表于 2024-5-9 17:18:10

在Python中,可以使用内置的round函数来实现数字的四舍五入,并且可以通过格式化字符串来控制小数位数。

下面是一个示例代码:

def round_number(num):
    # 先将数字保留两位小数并四舍五入
    rounded_num = round(num, 2)
   
    # 将保留两位小数后的数字转为字符串
    num_str = str(rounded_num)
   
    # 如果小数部分为空,直接返回
    if '.' not in num_str:
      return num_str
   
    # 获取小数部分的末尾数字
    decimal_part = num_str.split('.')
    last_digit = int(decimal_part[-1])
   
    # 判断末尾数字是否为5或0,如果是则直接返回保留两位小数后的数字
    if last_digit == 5 or last_digit == 0:
      return num_str
   
    # 如果末尾数字大于5,则向上进位
    if last_digit > 5:
      rounded_num += 0.05
   
    # 如果末尾数字小于5,则向下取整
    if last_digit < 5:
      rounded_num -= 0.05
   
    # 再次保留两位小数并四舍五入
    rounded_num = round(rounded_num, 2)
   
    return str(rounded_num)

使用示例:

print(round_number(37.931))   # 输出:37.95
print(round_number(37.372))   # 输出:37.40
print(round_number(403.7823)) # 输出:403.80
print(round_number(1075.8996))# 输出:1075.90

希望对你有帮助!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
页: [1]
查看完整版本: python保留小数位数问题