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

Pandas保留小数:round(2)后需避免值近似为1.00的问题

解决Python Pandas中保留两位小数时强制将接近1的数转为0.99的问题

针对你遇到的问题——含6位小数的浮点值保留两位小数时,接近1的数(如0.998344)调用round(2)得到1.0,但需要输出0.99且必须为两位小数,以下是两种可行的解决方案:

方法1:使用向下取整实现强制截断到0.99

利用numpy.floor函数,将数值放大100倍后取不大于它的最大整数,再缩小回原比例,直接得到两位小数的截断结果,正好符合需求:

import pandas as pd
import numpy as np

ones_list = [0.998344, 0.996176, 0.998344, 0.998082]
df = pd.DataFrame(ones_list, columns=['value_to_round'])

# 计算截断到两位小数的结果
df['rounded_value'] = np.floor(df['value_to_round'] * 100) / 100
# 强制格式化为两位小数,确保输出为0.99而非其他格式
df['rounded_value'] = df['rounded_value'].apply(lambda x: f"{x:.2f}")

print(df['rounded_value'])

输出结果:

0    0.99
1    0.99
2    0.99
3    0.99
Name: rounded_value, dtype: object

方法2:先四舍五入再替换目标值

先正常调用round(2),再将结果中等于1.0的数值替换为0.99,最后格式化两位小数:

import pandas as pd

ones_list = [0.998344, 0.996176, 0.998344, 0.998082]
df = pd.DataFrame(ones_list, columns=['value_to_round'])

# 先四舍五入,再替换1.0为0.99,最后格式化
df['rounded_value'] = df['value_to_round'].round(2).replace(1.0, 0.99).apply(lambda x: f"{x:.2f}")

print(df['rounded_value'])

输出结果与方法1一致。

两种方法的区别:

  • 方法1会对所有数值做两位小数的向下取整,比如0.994999会得到0.99;
  • 方法2仅修正四舍五入后等于1.0的数值,其他数值正常保留四舍五入结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:50:27