unix 将小数四舍五入小数点后两位

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unix 将小数四舍五入小数点后两位相关的知识,希望对你有一定的参考价值。

在文件夹下有kk.file这个文件,我现在取到了文件中total:这行的数据为:25.456,如下:
tail -10 kk.file | grep "total:" | awk -F: 'print $2'
输出是:25.45642131254

现在想要将它四舍五入成 25.46
我的操作是
tail -10 kk.file | grep "total:" | awk -F: 'print $2' | awk 'BEGINprintf "%.2f\n", $1'
但是输出却是0.00,
求大神解惑!

输出是0.00,那是因为你没有处理空格,应该用-F指定冒号或者空格,也就是
-F ': '

最后应该执行的是
tail -10 kk.file | grep "total:" | awk -F ': ' 'print $2' | awk 'printf "%.2f\n",$1'

不过很奇怪,awk在处理浮点数后2位的四舍五入时,如果浮点数后第偶数位是5,它不会入,但awk在处理浮点数后奇数位的四舍五入时,也没有此问题,我也奇怪。
参考技术A awk是逐行处理数据的,他的处理分三个阶段,第一阶段包含在BEGIN里,这是在所有数据处理之前的初始化工作,这个时候$1还没有被赋值,因此应该是0来自:求助得到的回答 参考技术A 处理浮点数后2位的四舍五入时,如果浮点数后第偶数位是5,它不会入, 参考技术B 方便的话提供下kk.file内容

只保留小数点后的前两位数字,不四舍五入[重复]

【中文标题】只保留小数点后的前两位数字,不四舍五入[重复]【英文标题】:Keep only first two digits after decimal with no rounding [duplicate] 【发布时间】:2018-03-27 07:33:49 【问题描述】:

我只想保留小数点后的前两位,但我不想四舍五入或转换该值。

例如:

143,655 -> 143.65
547934,945 -> 547934,94

转换或舍入值不起作用,它会修改值。

【问题讨论】:

那是CommaDot 【参考方案1】:

使用带有截断功能的ROUND()

https://docs.microsoft.com/en-us/sql/t-sql/functions/round-transact-sql

select  round(143.655, 2, 1),
        round(547934.945, 2, 1)

最后一个参数,非零时会截断

【讨论】:

已解决,非常感谢! @Dorian Stefan 如果它解决了您的问题,请接受此答案。

以上是关于unix 将小数四舍五入小数点后两位的主要内容,如果未能解决你的问题,请参考以下文章

AWK中怎样四舍五入取数字小数点后两位

XSLT - 四舍五入到小数点后两位

excel怎么把小数点后保留两位怎么操作?

vue 保留小数点后两位以及转化为百分比

java 将double类型的数 保留两位小数四舍五入 若小数点左边大于三位 千位分隔符

Spark Java 将数据帧中的每个值四舍五入到小数点后两位。