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

如何在Bash中分离十进制数的整数部分和小数部分

Bash拆分十进制数值的参数扩展修正方案

问题原因

你当前的写法不符合Bash原生参数扩展的glob匹配规则:

  • Bash的参数扩展前缀删除#、后缀删除%语法使用的是glob模式而非正则,取反符号!需要放在[]字符组内部才会生效
  • 原有匹配逻辑完全错误,导致没有匹配到任何可删除的内容,最终返回原始值

正确实现代码

基础版(适配单个小数点的常规十进制数)

t=13.491675 
# 取整数部分:删除最长匹配的、从.开始的所有后缀内容
ts=${t%%.*}
# 取小数部分:删除最短匹配的、从开头到第一个.的所有前缀内容
fr=${t#*.}

执行后ts的值为13,fr的值为491675,符合预期。

小提示:%%表示匹配最长的符合规则的后缀,%匹配最短的;##匹配最长的符合规则的前缀,#匹配最短的。上述实现用%%.*是为了兼容类似1.2.3的多小数点异常输入,保证始终取最前面的整数部分。

边界兼容版(适配无小数点的整数输入)

如果输入可能是没有小数点的整数,可以额外加一层判断避免小数部分返回原始值:

t=13.491675
if [[ $t == *.* ]]; then
    ts=${t%%.*}
    fr=${t#*.}
else
    ts=$t
    fr=0
fi

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 15:57:03