Bash 验证数字,然后格式化为十进制
后期编辑: 我的脚本中有一个函数无法正常工作。 目标是验证数字,然后将其格式化为十进制 所以我创建了一个测试文件,它看起来像我的函数Bash 验证数字,然后格式化为十进制,bash,awk,decimal,Bash,Awk,Decimal,后期编辑: 我的脚本中有一个函数无法正常工作。 目标是验证数字,然后将其格式化为十进制 所以我创建了一个测试文件,它看起来像我的函数 TMP_NUM="$1" if [[ "$TMP_NUM" = *[[:digit:]]* ]]; then if [[ "$TMP_NUM" =~ ^[0-9]+([.][0-9]+)?$ ]] ; then echo "$TMP_NUM" else TMP_DECIMAL=$(awk -v decimal="$T
TMP_NUM="$1"
if [[ "$TMP_NUM" = *[[:digit:]]* ]]; then
if [[ "$TMP_NUM" =~ ^[0-9]+([.][0-9]+)?$ ]] ; then
echo "$TMP_NUM"
else
TMP_DECIMAL=$(awk -v decimal="$TMP_NUM" 'BEGIN {printf("%f", decimal) }')
if [[ "$TMP_DECIMAL" =~ ^[0-9]+([.][0-9]+)?$ ]] ; then
echo "$TMP_DECIMAL"
else
echo "failed !"
fi
fi
else
echo "failed !"
fi
exit 0
结果
mario@antec:~$ test.function4.sh 1e-06
0.000001
mario@antec:~$ test.function4.sh 1e-05
0.000010
mario@antec:~$ test.function4.sh 0Hallo
0.000000
如何更改测试参数以仅格式化数字,以及在除eE之外的任何数字后面有任何字母时出现错误消息?您可以通过这种方式重写代码-格式化数字之前检查数字:
#!/bin/bash
TMP_NUM="$1"
if [[ "$TMP_NUM" =~ ^[0-9]+([.][0-9]+)?$ ]]; then
TMP_DECIMAL=$(awk -v decimal="$TMP_NUM" 'BEGIN {printf("%f", decimal) }')
echo "$TMP_DECIMAL"
else
echo "failed !"
fi
printf
正在舍入您的数字。您可以更改格式字符串以指定要保留的小数位数。您可以用这种方式重写代码-在格式化之前检查数字:
#!/bin/bash
TMP_NUM="$1"
if [[ "$TMP_NUM" =~ ^[0-9]+([.][0-9]+)?$ ]]; then
TMP_DECIMAL=$(awk -v decimal="$TMP_NUM" 'BEGIN {printf("%f", decimal) }')
echo "$TMP_DECIMAL"
else
echo "failed !"
fi
printf
正在舍入您的数字。您可以更改格式字符串,以指定要保留的小数位数。awk
请救命
定义此函数
test_number() { awk -v v="$1" 'BEGIN{if(v+0==v) printf "%f\n",v; else print "failed!"}';}
用法
awk
救援
定义此函数
test_number() { awk -v v="$1" 'BEGIN{if(v+0==v) printf "%f\n",v; else print "failed!"}';}
用法
谢谢你的回答。如何格式化字符串以指定点后的数字?不幸的是,我写错了剧本,不得不编辑我的帖子。谢谢你的回答。如何格式化字符串以指定点后的数字?不幸的是,我写错了脚本,不得不编辑我的帖子。可能会使用不同的函数名吗<代码>测试可能会干扰shell内置。可能会为函数使用其他名称吗<代码>测试可能会干扰外壳内置。