Unix 不四舍五入的awk除法

Unix 不四舍五入的awk除法,unix,awk,Unix,Awk,我正在处理一个包含一系列精度不同的十进制值的文件。 我需要把这些数字除以100,不需要四舍五入 awk '{val = $1 / 100; print val}' input_file.txt 输入文件: 输出: 我不希望对结果进行四舍五入并得到以下输出: 提前感谢请尝试以下内容 awk '{sub(/\./,".00")} 1' Input_file 使用OP的原始命令: awk '{val = $1 / 100; sub(/\./,".00",val);print val}' input

我正在处理一个包含一系列精度不同的十进制值的文件。 我需要把这些数字除以100,不需要四舍五入

awk '{val = $1 / 100; print val}' input_file.txt
输入文件:

输出:

我不希望对结果进行四舍五入并得到以下输出:


提前感谢

请尝试以下内容

awk '{sub(/\./,".00")} 1' Input_file
使用OP的原始命令:

awk '{val = $1 / 100; sub(/\./,".00",val);print val}' input_file.txt

你能试试下面的吗

awk '{sub(/\./,".00")} 1' Input_file
使用OP的原始命令:

awk '{val = $1 / 100; sub(/\./,".00",val);print val}' input_file.txt

这是一个有趣的问题,因为不同的数字需要不同的精度。这里有一个解决方法

$ awk '{d=length($1); printf "%."d"f\n", $1/100}' file

0.00123456789012
0.00123456789012345
0.0012345678901234567
这也应该包括大于1的数字

$ awk '{d=length($1); if($1>1) d+=1-length(int($1)); printf "%."d"f\n", $1/100}' file

可能需要调整负数…

有趣的问题,因为不同的数字需要不同的精度。这里有一个解决方法

$ awk '{d=length($1); printf "%."d"f\n", $1/100}' file

0.00123456789012
0.00123456789012345
0.0012345678901234567
这也应该包括大于1的数字

$ awk '{d=length($1); if($1>1) d+=1-length(int($1)); printf "%."d"f\n", $1/100}' file

可能需要调整负数…

awk数字不是十进制,而是二进制浮点。使用awk-vofmt=%.17g'…'可能会获得更高的精度,但这正是您所期望的输出。如果所有数字的格式都是0.XXXX,您可以简单地将其分为/\./,.00,$1-awk数字不是十进制的,而是二进制浮点数。使用awk-vofmt=%.17g'…'可能会获得更高的精度,但这正是您所期望的输出。如果所有数字的格式都是0.XXXX,您可以简单地将其分为/\./,.00,$1-可以使用printf%.*f\n,d,$1/100将精度作为printf参数提供,而不是将其连接到格式字符串中。使用sprinf函数将返回字符串。可以使用printf%.*f\n,d,$1/100将精度作为printf参数提供,而不是将其连接到格式字符串中。使用sprinf函数,它将返回一个字符串。