如何使用f-string实现浮点数截断(向下取整)保留指定小数位
原因说明
f-string 自带的浮点数精度格式化默认走舍入逻辑,没有内置截断(向下取整)规则,所以直接用:.1f处理700.75时会输出舍入后的700.8,没法直接得到你要的截断结果。
实现方法
你只需要先把原始浮点数按目标精度做截断处理,再传入f-string格式化即可,完全不需要放弃f-string的使用:
- 引入标准库
math的floor方法实现向下取整 - 按要保留的小数位数对数值做缩放:比如保留1位小数就乘以10,保留2位就乘以100
- 对缩放后的值向下取整,再除以对应缩放倍数还原,就得到了截断后的数值
- 把处理完的数值传入f-string做格式化即可
对应代码如下:
import math quantity = 700.75 # 配置保留的小数位数 precision = 1 scale = 10 ** precision truncated_val = math.floor(quantity * scale) / scale # 继续使用f-string完成格式化 quantity = float(f'{truncated_val:.1f}')
运行后得到的quantity值就是预期的700.7,如果需要适配不同保留位数,只需要修改precision变量的值即可。
补充:如果你的使用场景里涉及负数,需要实现向零截断(比如-700.75保留1位得到-700.7,而非向下取整的-700.8),只需要把代码里的
math.floor替换成math.trunc就行,其余逻辑不用改。
内容的提问来源于stack exchange,提问作者Victor Cui
相关产品推荐
相关产品推荐

