RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1603693
Accepted
Лена
Лена
Asked:2024-12-30 15:33:34 +0000 UTC2024-12-30 15:33:34 +0000 UTC 2024-12-30 15:33:34 +0000 UTC

四舍五入到整数

  • 772

例如,变量包含数字,而不是整数

321.23453

如何将给定数字舍入为整数,以便进一步除以整数。

echo "TEXT $((($time/2))) TEXT"

我试过了,没用。我对四舍五入一无所知,也许可以除以整数而不对数字进行四舍五入?

linux
  • 3 3 个回答
  • 49 Views

3 个回答

  • Voted
  1. Oopss
    2024-12-30T18:01:37Z2024-12-30T18:01:37Z

    要使用浮点数,最好使用编程语言。但对于简单的计算,您可以使用 bc 终端计算器。

    apt install bc (或者你的包管理器中的任何东西)

    echo "Text $(echo "scale=2; 321.2345/2"|bc)  Next next" 
    Text 160.61  Next next
    

    如果您需要一个整数,但这是没有四舍五入的,

    echo "Text $(echo "scale=0; 321.2345/2"|bc)  Next next"
    Text 160  Next next
    

    如果四舍五入到最接近的整数

    echo "Text $(echo "scale=0; (321.2345 / 2 + 0.5) / 1"|bc)  Next next" 
    Text 160  Next next
    
    • 2
  2. Pak Uula
    2024-12-30T18:28:03Z2024-12-30T18:28:03Z

    您可以使用内置工具进行舍入bash。当以给定精度打印实数时,该函数printf在打印之前进行舍入:

    NUM=34.567
    ROUNDED=$(printf "%.0f" $NUM)
    echo $ROUNDED
    

    将打印 35

    但 bash 只能除以整数:echo $(( 35 / 2 ))它产生 17。

    要划分你需要使用第三方程序,例如bc

    # Принимает три параметра A B NUM_DIGS
    # Печатает A/B с числом NUM_DIGS цифр после запятой
    # Если NUM_DIGS не задано, то равно 6.
    function div {
        a=$1
        b=$2
        num_digs=${3:-6}
    
        echo "scale=$num_digs; $a / $b" | bc
    }
    

    完整示例,321.23453舍入并除以4:

    function round {
        a=$1
    
        printf "%.0f\n" $a
    }
    
    function div {
        a=$1
        b=$2
        num_digs=${3:-6}
    
        echo "scale=$num_digs; $a / $b" | bc
    }
    
    TEST=321.23453
    OTHER=4
    
    echo $(div $(round $TEST) $OTHER 3)
    

    结果80.250

    • 2
  3. Best Answer
    Vitalizzare
    2024-12-31T10:23:49Z2024-12-31T10:23:49Z

    首先,我们可以通过将其解释为后缀来丢弃小数部分。在文档中,这称为参数扩展。同样,为了获取小数部分,我们将数字的整数部分(直到并包括点)解释为前缀。例如:

    x=12.345; echo "x=$x, int(x)=${x%.*}, frac(x)=${x#*.}"
    

    这段代码的结果将是字符串"x=12.345, int(x)=12, frac(x)=345"。

    如果我们在 Bash 中工作,我们可以通过用空格替换句点并将结果放在括号中来保留小数部分。这将被解释为一个数组。当通过名称访问变量而不指定索引时,将使用数组的第一个值(即我们例子中的整数部分)。如果您需要小数 1,那么我们可以通过显式指示索引 1 从数字中获取它:

    x=12.345
    number=(${x/./" "})     # это замена точки на пробел, двойные кавычки
                            # не обязательны, они для того, чтобы явно обозначить
                            # присутствие пробела и облегчить чтение кода
    echo "number=$number, frac(number)=${number[1]}"
    

    这段代码的结果将是字符串"number=12, frac(number)=345"。

    如果需要的话,我们可以通过提取小数部分的第一位数字,将其除以5并将结果与​​整个部分相加(这里${frac_x:0:1}是指frac_x从位置0开始的单位长度的子串中提取):

    x=34.567; frac_x=${x#*.}; round_x=$((${x%.*} + ${frac_x:0:1}/5)); echo $round_x
    

    该代码的结果将是数字 35。


    PS 从注释来看,你想要处理命令返回的时间

    ffprobe -i file_path -show_entries format=duration -v quiet -of csv=p=0
    

    该时间以秒为单位表示。我假设您想以以下格式表示它hh:mm:ss.ms为此目的,我将使用awk:

    ffprobe -i video.mp4 -show_entries format=duration -v quiet -of csv=p=0 | \
    awk '{t=$1; h=int(t/3600); m=int(t/60)%60; s=t%60; 
          printf "%02i:%02i:%02.3f\n", h, m, s}'
    

    如果返回的时间等于321.23453,则上述代码的结果将为00:05:21.235(即视频时长为 5 分 21 秒,有尾部)

    另请参阅:关于 Awk 中的舍入功能

    • 2

相关问题

  • 如果 fuser -k number/tcp 没有帮助,如何在 Debian 中释放端口?

  • Ubuntu。startx 不起作用。黑屏

  • --syn 在 iptables 中有什么作用?

  • 为什么需要iso格式?

  • C程序中没有密码的sudo

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    我看不懂措辞

    • 1 个回答
  • Marko Smith

    请求的模块“del”不提供名为“default”的导出

    • 3 个回答
  • Marko Smith

    "!+tab" 在 HTML 的 vs 代码中不起作用

    • 5 个回答
  • Marko Smith

    我正在尝试解决“猜词”的问题。Python

    • 2 个回答
  • Marko Smith

    可以使用哪些命令将当前指针移动到指定的提交而不更改工作目录中的文件?

    • 1 个回答
  • Marko Smith

    Python解析野莓

    • 1 个回答
  • Marko Smith

    问题:“警告:检查最新版本的 pip 时出错。”

    • 2 个回答
  • Marko Smith

    帮助编写一个用值填充变量的循环。解决这个问题

    • 2 个回答
  • Marko Smith

    尽管依赖数组为空,但在渲染上调用了 2 次 useEffect

    • 2 个回答
  • Marko Smith

    数据不通过 Telegram.WebApp.sendData 发送

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5