You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Tcl中实现十进制数向最接近整数的取整?

在Tcl中实现十进制数的四舍五入取整(满足0.5一律进位)

你提到的这种“小数部分≥0.5就进位,<0.5则舍去”的取整需求,Tcl内置的round函数其实遵循银行家舍入规则(四舍六入五成双)——当小数部分恰好为0.5时,会舍入到最近的偶数,比如round(12.5)会返回12而不是13,这和你的需求不符。所以我们需要用更贴合你需求的实现方式:

方法一:仅处理正数场景(简单高效)

如果你的需求只涉及正数,直接用expr {int($num + 0.5)}就能完美实现:

# 测试你的示例输入
puts [expr {int(12.34 + 0.5)}]   ;# 输出 12
puts [expr {int(12.45 + 0.5)}]   ;# 输出 12
puts [expr {int(12.50 + 0.5)}]   ;# 输出 13
puts [expr {int(12.57 + 0.5)}]   ;# 输出 13

方法二:兼容正负数值的通用实现

如果需要处理负数(比如希望-12.5返回-13),可以封装一个自定义过程来区分正负逻辑:

proc round_traditional {num} {
    if {$num >= 0} {
        return [expr {int($num + 0.5)}]
    } else {
        return [expr {int($num - 0.5)}]
    }
}

# 测试负数场景
puts [round_traditional(-12.3)]   ;# 输出 -12
puts [round_traditional(-12.5)]   ;# 输出 -13
puts [round_traditional(-12.6)]   ;# 输出 -13

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

火山引擎 最新活动