Python 3浮点数格式化需求:支持正负精度的字符串转换
解决方案
可以利用Python内置的round()函数(原生支持正负精度)结合字符串格式化来实现需求,以下是完整实现:
def to_string_(x: float, prec: int) -> str: rounded = round(x, prec) if prec < 0: return str(int(rounded)) else: if prec == 0: return str(int(rounded)) return f"{rounded:.{prec}f}"
逻辑说明
- 负精度处理:
round(x, prec)当prec为负数时,会自动对小数点左侧的对应数位四舍五入(比如prec=-1对应十位),结果是整数形式的浮点数,转成整数再转字符串即可去掉多余的.0。 - 零精度处理:四舍五入到整数位后,直接转整数字符串,避免出现
.0后缀。 - 正精度处理:使用格式化字符串
f"{rounded:.{prec}f}",自动保留指定小数位数,不足时补零,完全匹配示例中的格式要求。
验证示例
运行你给出的测试用例,结果完全符合预期:
>>> to_string_(1.2345e2, 3) '123.450' >>> to_string_(1.2345e2, 2) '123.45' >>> to_string_(1.2345e2, 1) '123.5' >>> to_string_(1.2345e2, 0) '123' >>> to_string_(1.2345e2, -1) '120' >>> to_string_(1.2345e2, -2) '100' >>> to_string_(1.2345e2, -3) '0' >>> to_string_(1.2345e-1, 0) '0' >>> to_string_(1.2345e-1, 1) '0.1' >>> to_string_(1.2345e-1, 6) '0.123450'
内容的提问来源于stack exchange,提问作者EvaR
相关产品推荐
相关产品推荐

