【问题标题】:How to round decimal values with bash script?如何使用 bash 脚本舍入十进制值?
【发布时间】:2019-10-16 17:20:44
【问题描述】:

运行一些代码后,我确实得到了这个 4D 数组,它保存在一个 txt 文件中,值很长,所以我需要将它们四舍五入到小数点后 6 位,更改应该在原始文件中完成,所以我可以拥有相同格式的数组,而不仅仅是打印值

这里是数组的一部分

[[[[-0.027340000495314598, -0.07065500319004059, 0.06236099824309349, -0.11684399843215942, -0.05784200131893158], [-0.16122999787330627, -0.14122700691223145, -0.1653739959001541, 0.1630070060491562, 0.05366099998354912], [0.035610001534223557, -0.05879399925470352, 0.06178700178861618, 0.15509599447250366, -0.11066299676895142], [-0.006271999794989824, -0.04911699891090393, -0.06760299950838089, -0.005801999941468239, 0.02808699943125248], [-0.1022690013051033, -0.08862099796533585, 0.14321200549602509, -0.00038400001358240843, 0.10744699835777283]]

【问题讨论】:

  • 当您“运行一些代码”时,在步骤中计算正确的精度,而不是稍后解析文本输出和处理,这听起来更容易、更健壮。
  • 我试过了,但是对于某些文件,我有大约 48000 个值,它以这种方式打印它们 0.03359864] ... [ 0.02056543 0.02923108 -0.03538683 ... -0.02362897 0.06854655 0.01773592] [-0.03016991 0.00925411 0.03128474 ... 0.04443446 0.02176905 -0.01632672] [ 0.0129515 0.01182471 -0.07050638 ... 0.00809885 0.00409077 0.00621234]] [[ 0.00352853 0.02887471 0.02953056 ... -0.01305439 -0.03605847 0.01689201] [ 0.00778143 0.02079013 -0.04591708 ... -0.00445832 那些 ... 替换这些值,因为有太多所以我想到了其他方法 @janos跨度>
  • 所以更改代码,使其不打印省略号。听起来您确实需要就上一步提出问题。
  • 您需要所有[], 在所需的输出中吗?

标签: linux bash rounding


【解决方案1】:
$ echo '[[[[-0.027340000495314598, -0.07065500319004059, 0.06236099824309349' |
    perl -pe 's/([-+]?[0-9]*\.[0-9]+|[0-9]+)/sprintf "%.6f","$1"/ge'
[[[[-0.027340, -0.070655, 0.062361

【讨论】:

    【解决方案2】:

    您可以为此使用 printf。我找到了一个例子here

    printf "%.*f\n" 6 "-0.027340000495314598"

    将返回 -0.027340。 6代表要打印的位数

    【讨论】:

    • 是的,但我需要将其应用于所有数字,我尝试了这个awk '{for(i=1;i<=NF;i++){$i=sprintf("%.6f",$i)}}1' weight01.c,但[ 之后的每个第一个值都四舍五入为0.000000 我不知道是什么问题@麻风病
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-02
    • 1970-01-01
    相关资源
    最近更新 更多