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

如何判断数字小数部分仅为.25或.75以执行对应代码分支?

问题:精确判断数字小数部分是否为.25或.75

我尝试编写一个简单的if-elif-else语句,根据数字执行不同操作,代码如下:

number = 25

if '.25' in str(number):
    number1 = number - 0.25, number + 0.25
    print(number1)

elif '.75' in str(number):
    number1 = number - 0.25, number + 0.25
    print(number1)

elif number == 0:
    numberformated = format(number, '.1f')
    print(numberformated)

else:
    print(number)

问题是,当number为1.754这类数字时,会触发elif '.75' in str(number):分支,但我希望仅当数字的小数部分恰好是.75(或.25)时才执行该分支。例如number为17.753时,应执行else分支而非该elif分支,请问该如何实现?


解决方案

不要通过字符串匹配判断,改用数学运算结合浮点数精度处理的方式,这样可以精确识别小数部分恰好为.25或.75的情况:

方法1:计算小数部分并做精度容错判断

number = 1.75

# 提取小数部分,处理浮点数精度误差
decimal_part = number - int(number)
# 判断是否接近0.25或0.75(用1e-9作为精度阈值)
is_quarter = abs(decimal_part - 0.25) < 1e-9
is_three_quarter = abs(decimal_part - 0.75) < 1e-9

if is_quarter or is_three_quarter:
    number1 = (number - 0.25, number + 0.25)
    print(number1)
elif number == 0:
    print(format(number, '.1f'))
else:
    print(number)

方法2:通过乘以4判断是否为非整数的整数倍

number = 1.75

# 判断数字不是整数,且乘以4后接近整数(处理浮点数精度)
if number != int(number) and abs((number * 4) - round(number * 4)) < 1e-9:
    number1 = (number - 0.25, number + 0.25)
    print(number1)
elif number == 0:
    print(format(number, '.1f'))
else:
    print(number)

说明

  • 字符串匹配的问题在于:只要数字的字符串表示中包含.25或.75子串就会触发分支,比如1.754的字符串是"1.754",其中包含.75,但它的小数部分实际是.754,不符合要求。
  • 数学计算的方式直接针对小数部分的数值进行判断,同时加入1e-9的精度阈值,是为了避免浮点数存储时的精度误差(比如1.75可能被存储为1.7499999999999998)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:45:28