Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 验证数字,然后格式化为十进制_Bash_Awk_Decimal - Fatal编程技术网

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内置。可能会为函数使用其他名称吗<代码>测试可能会干扰外壳内置。