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

如何将从CSV数据集获取的两个均值浮点值转换为整数比例?

如何将两个浮点均值转换为整数比例?

问题背景

从CSV数据集计算得到两类事件的平均到场单位数:

mean_buildingFire = 10.82500730353491  # 111 - Building fire的平均到场单位数
mean_smoke = 4.057505093955173         # 651 - Smoke scare, odor of smoke的平均到场单位数

现有提取均值的Python代码:

mean_buildingFire = dataset.loc[dataset['INCIDENT_TYPE_DESC'] == '111 - Building fire', 'UNITS_ONSCENE'].mean()
mean_smoke = dataset.loc[dataset['INCIDENT_TYPE_DESC'] == '651 - Smoke scare, odor of smoke', 'UNITS_ONSCENE'].mean()

print(mean_buildingFire)
print(mean_smoke)

需要将这两个浮点数值转换为最简整数比例。


解决方案

方法1:使用fractions模块自动约分

Python的fractions.Fraction类可直接处理浮点数并完成约分,通过limit_denominator方法能避免浮点数精度问题导致的超大分母:

from fractions import Fraction

# 计算比值并简化
ratio = Fraction(mean_buildingFire, mean_smoke)
# 限制分母最大值为1000,得到近似的合理整数比
simplified_ratio = ratio.limit_denominator(1000)

print(f"最简整数比例:{simplified_ratio.numerator}:{simplified_ratio.denominator}")

针对你的数值,运行后会输出 8:3(因为10.825/4.0575≈2.668,接近8/3≈2.6667)。

方法2:手动缩放+最大公约数(GCD)约分

先将浮点数放大为整数,再通过计算最大公约数完成约分,规避浮点数精度影响:

import math

# 选择足够大的缩放因子,保留浮点数精度
scaling_factor = 10 ** 12
num1 = int(mean_buildingFire * scaling_factor)
num2 = int(mean_smoke * scaling_factor)

# 计算两个整数的最大公约数
gcd_val = math.gcd(num1, num2)

# 约分得到最简整数比
simplified_num1 = num1 // gcd_val
simplified_num2 = num2 // gcd_val

print(f"最简整数比例:{simplified_num1}:{simplified_num2}")

此方法同样会得到近似8:3的结果。


注意事项

  • 浮点数存在精度误差,直接使用Fraction可能生成极复杂的分数,limit_denominator是实用的折中方案。
  • 手动缩放时,需根据浮点数的小数位数选择合适的缩放因子,避免精度丢失或整数溢出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:46:07