bash - Bash 上限函数舍入非常小的数字
问题描述
我正在尝试在 bash 中创建一个上限函数,该函数将取一个数字并向上舍入作为上限函数。
例如:如果 shard_div 为 3.2,则 rounded_up 为 4。
rounded_up=`echo $shard_div | awk '{printf("%d\n",$0+=$0<0?0:0.9)}'`
出现问题的地方是一些 shard_div 变量是 0.5^-10 或 0.00001 之类的数字。发生这种情况时,rounded_up 为 0。
我宁愿不使用 if 语句,而且运行它的机器没有 Perl。
解决方案
使用bc
. 它有点健壮,但有效。
rounded_up=$(echo "scale=0; v=$shard_div; v=6; if (v%1 != 0) v = (v + 1); v / 1" | bc)
是必需的/ 1
,否则 bc 无法扩展。案件v%1 == 0
需要处理,否则整数也会按比例放大(如v=5; 5+1
-> 6)
推荐阅读
- java - 无法从 Java 将布尔首选项存储到 Windows 10 注册表,而整数和字符串已正确存储
- c++ - 什么可能导致在不同角度获得完全相同的三角函数输出
- python - 退出定义中的循环
- c - 出现错误:取消引用指向不完整类型“结构类型”的指针
- javascript - 在 asp.net core 中加载页面时如何显示已处理文件的数量?
- php - php / mariadb更新后禁止加载数据本地INFILE
- r - 当某些列表元素不可用时,在 R 中创建列表
- javascript - 这是使用 React-Filepond 的内存泄漏吗?
- javascript - 四舍五入到最接近的 0.5,而不是 0.0
- jquery - 如何在单击多个项目时使用 jQuery 循环遍历数组?