Python如何将25.0这类整值浮点数转整数,非整值小数转分数
Python 浮点数转整数/分数实现方案
核心问题原因
isinstance(25.0, int)返回False是因为该方法判断的是变量的类型而非存储的值,25.0本身是float类型,自然无法通过int类型校验。
解决方案
使用浮点数内置的is_integer()方法判断值是否为整数,再配合Python标准库fractions.Fraction实现分数转换,不需要自行实现转换逻辑避免精度问题。
完整实现代码
from fractions import Fraction def num_convert(input_num): # 判断是否为值为整数的浮点数 if isinstance(input_num, float) and input_num.is_integer(): return int(input_num) # 非整数数值转分数,传入字符串避免浮点精度误差 return Fraction(str(input_num))
测试效果
- 输入
0.5:返回Fraction(1, 2),格式化输出为1/2 - 输入
25.0:返回25(int类型) - 输入
3.75:返回Fraction(15, 4),格式化输出为15/4
补充说明
如果需要直接得到字符串格式的输出,可以在函数中追加判断逻辑:
def num_convert_str(input_num): if isinstance(input_num, float) and input_num.is_integer(): return str(int(input_num)) frac = Fraction(str(input_num)) return f"{frac.numerator}/{frac.denominator}"
内容的提问来源于stack exchange,提问作者Adnan
相关产品推荐
相关产品推荐

