如何在 bash 中打印固定数字或浮动数字

How to printf fixed number or digits in floating in bash

我想输出具有精确位数的浮点数而不在前面填充,因为我想在前面加上 $ 符号 例如我读了数字:

1.2345
12.345
123.456

我想要输出:

.23450
.3450
3.456

我在 printf 中尝试了许多不同的变体,但无法确定总位数。我也没有找到这个特定问题的答案
printf "$%.7f\n" 1.2345 12.345 123.456
"$%.7f\n "$%07f\n "$%6.4f\n "$%.7g\n
我是否需要为不同大小的数字(即 1、10、100)获取不同的格式?

How to printf fixed number or digits in floating in bash

打印打印数字的前 7 个字符。

printf "$%.7s\n" "$(printf "%.6f" 1234.2345)"

Do I need to get different formatting for for different magnitude of numbers ie 1, 10, 100?

是的,您应该为自定义格式要求实现自己的格式设置功能。没有您想要的 printf 格式说明符。

这是在 Bash 中使用 floating-point 格式的替代方法:

#!/usr/bin/env bash

float_numbers=(1.2345 12.345 123.456)

# Get the longest number's length
for float in "${float_numbers[@]}"; do
  max_length=$((${#float} > max_length ? ${#float} : max_length))
done

for float in "${float_numbers[@]}"; do
  # Generate needed padding
  printf -v padding '%-*s' $((max_length - ${#float})) ''

  # Print $float followed by its 0 padding
  printf '$%s%s\n' "$float" "${padding// /0}"
done