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

Streamlit st.number_input()数值取整与条件逻辑实现问题

解决Streamlit number_input的两个自定义需求

一、实现input1自动取整到最近的0.5倍数

format参数仅控制数值的显示格式,无法实现自动取整逻辑。要实现输入后自动对齐到0.5的倍数,需要手动处理输入值,结合st.session_state可让输入框同步显示处理后的结果:

import streamlit as st

# 初始化会话状态,保存处理后的input1值
if "input1" not in st.session_state:
    st.session_state.input1 = 5.0

# 显示输入框,使用会话状态中的值作为当前值
input1_raw = st.number_input("x", value=st.session_state.input1, step=0.5, format="%0.1f")

# 将输入值取整到最近的0.5倍数:放大2倍取整后再缩小2倍
st.session_state.input1 = round(input1_raw * 2) / 2
input1 = st.session_state.input1

# 验证结果(可选)
st.write("处理后的x值:", input1)

二、实现input2的反向递增与区间取整

该需求无法通过number_input原生参数实现,需结合st.session_state跟踪当前值,自定义处理逻辑:

import streamlit as st

# 初始化会话状态,保存处理后的input2值
if "input2" not in st.session_state:
    st.session_state.input2 = -110

def process_y(new_value, prev_value):
    # 处理-100到100之间的数值:正数取100,负数取-100
    if -100 <= new_value <= 100:
        return 100 if new_value >= 0 else -100
    # 处理从-100递增的特殊情况:直接跳转到101
    if prev_value == -100 and new_value > prev_value:
        return 101
    # 处理从101递减的特殊情况:直接跳转到-100
    if prev_value == 101 and new_value < prev_value:
        return -100
    # 其他超出区间的数值保持原样
    return new_value

# 显示输入框
input2_raw = st.number_input("y", value=st.session_state.input2)
# 处理输入值并更新会话状态
st.session_state.input2 = process_y(input2_raw, st.session_state.input2)
input2 = st.session_state.input2

# 验证结果(可选)
st.write("处理后的y值:", input2)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 05:40:18