You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:小数为.0时取整,其余情况保留1位小数的实现

浮点数格式化需求与代码问题

需求:对浮点数进行格式化,当小数部分为.0时显示为整数,其他情况保留1位小数。
现有问题:使用round函数处理时,data1计算结果为50.0,期望显示为50;data2计算结果应为37.5,但当前代码输出不符合预期。

现有代码

import pandas as pd

data1 = pd.DataFrame({'id' : ['a1', 'a1', 'a1', 'a1', 'a2', 'a2', 'a2', 'a2'], 
                 'label' : ['0','0','1','0','1','0','1','1']})

print(round((data1.id.eq('a1').sum() /
  (data1.id.eq('a1').sum() + data1.id.eq('a2').sum()).round(2) * 100), 0))


data2 = pd.DataFrame({'id' : ['a1', 'a1', 'a1', 'a2', 'a2', 'a2', 'a2', 'a2'], 
                 'label' : ['0','0','1','0','1','0','1','1']})

print(round((data2.id.eq('a1').sum() /
  (data2.id.eq('a1').sum() + data2.id.eq('a2').sum()).round(2) * 100), 0))

问题分析

  • 代码逻辑错误:round(2)的位置不合理,它被作用在分母的求和结果上,而非整个计算式,虽然这里分母是整数不影响结果,但后续用round(...,0)直接把37.5截断成了整数38,完全不符合保留一位小数的需求。
  • round函数本身做不到“小数部分为.0时显示整数,否则保留一位小数”的格式化效果,它返回的始终是浮点数,比如50.0无法自动转为整数格式。

解决方案

步骤1:修正计算逻辑,保留准确数值

先算出精确的百分比值,不要过早用round截断:

# 计算data1的百分比
count_a1 = data1.id.eq('a1').sum()
count_total = count_a1 + data1.id.eq('a2').sum()
percent1 = (count_a1 / count_total) * 100

# 计算data2的百分比
count_a1_2 = data2.id.eq('a1').sum()
count_total_2 = count_a1_2 + data2.id.eq('a2').sum()
percent2 = (count_a1_2 / count_total_2) * 100

步骤2:自定义格式化函数

写一个函数处理浮点数的显示规则:

def format_float(num):
    if num.is_integer():
        return int(num)
    else:
        return round(num, 1)

步骤3:应用格式化并输出

print(format_float(percent1))  # 输出50
print(format_float(percent2))  # 输出37.5

完整代码

import pandas as pd

def format_float(num):
    if num.is_integer():
        return int(num)
    else:
        return round(num, 1)

# 处理data1
data1 = pd.DataFrame({'id' : ['a1', 'a1', 'a1', 'a1', 'a2', 'a2', 'a2', 'a2'], 
                 'label' : ['0','0','1','0','1','0','1','1']})
count_a1 = data1.id.eq('a1').sum()
count_total = count_a1 + data1.id.eq('a2').sum()
percent1 = (count_a1 / count_total) * 100
print(format_float(percent1))

# 处理data2
data2 = pd.DataFrame({'id' : ['a1', 'a1', 'a1', 'a2', 'a2', 'a2', 'a2', 'a2'], 
                 'label' : ['0','0','1','0','1','0','1','1']})
count_a1_2 = data2.id.eq('a1').sum()
count_total_2 = count_a1_2 + data2.id.eq('a2').sum()
percent2 = (count_a1_2 / count_total_2) * 100
print(format_float(percent2))

内容的提问来源于stack exchange,提问作者tonydanza123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 02:42:33