分页: 1 / 1

数字运算问题

发表于 : 2011-07-19 11:49
novesky
其实我是想根据mplayer的到的视屏长度计算毫秒数的,mplayer给出的是xx.xxx形式,比如12.03输出应该为12030
我的计算脚本

v=12.03
a=`echo $v |cut -d. -f 1`
b=`echo $v |cut -d. -f2`
echo $(($((a*1000))+$b))

现在有些情况下算不来,其实归纳下就是比如
echo $((08)) 会报错,更小的数字不会
bash: 08: 数值太大不可为算数进制的基 (错误符号是 "08")
而echo $((8))不会
这是什么原因?

下面是我修改后的代码,很傻

代码: 全选

videolength=$1
secs=`echo $videolength |cut -d. -f 1`                   
msecs=`echo $videolength |cut -d. -f 2`

a=`echo $msecs |cut -c1`
if [ $a == 0 ]
then
  msecs=`echo $msecs |cut -c2-`
  [ $msecs -lt 10 ] && msecs=$(($msecs*10))
fi

vlen=$(($msecs+$(($secs*1000))))                           
echo $vlen 
还有,不许用bc

Re: 数字运算问题

发表于 : 2011-07-19 12:10
poweroff
08 bash 把它当成8进制了。

Re: 数字运算问题

发表于 : 2011-07-19 12:22
fnan
v=12.013;set ${v/.*(0)/ };echo $(($1*1000+$2))
12013

Re: 数字运算问题

发表于 : 2011-07-19 13:47
cjxgm

代码: 全选

echo $v*1000|bc
:em06

Re: 数字运算问题

发表于 : 2011-07-19 14:12
fnan
kose1@kose1-desktop:~/b$ v=12.03;set ${v/.*(0)/ };echo $(($1*1000+$2))
12003
kose1@kose1-desktop:~/b$ echo $v*1000|bc
12030.00
可不一样的结果。

Re: 数字运算问题

发表于 : 2011-07-19 14:21
novesky
fnan 写了:v=12.013;set ${v/.*(0)/ };echo $(($1*1000+$2))
12013
可能我没说清楚,小数是表示时间,即12.01秒=12010毫秒,你的算出来就是12001
不过方法不错,还没看懂,那个set ${v/.*(0)/ }什么意思?

Re: 数字运算问题

发表于 : 2011-07-19 14:34
fnan
那知道lz实际想法,按例子修改而已,为何不许用bc?按你说的不就是变量v乘1000吗?
那个set ${v/.*(0)/ }什么意思?
去掉点号和零并设置位置参数。

Re: 数字运算问题

发表于 : 2011-07-19 15:03
fnan
乘1000,即小数只保留三位,不用bc就:
v=12.013;set ${v/./ };expr substr $1$2000 1 $((${#1}+3))
12013

Re: 数字运算问题

发表于 : 2011-07-19 15:33
novesky
fnan 写了:那知道lz实际想法,按例子修改而已,为何不许用bc?按你说的不就是变量v乘1000吗?
那个set ${v/.*(0)/ }什么意思?
去掉点号和零并设置位置参数。
板子上没bc,移植又闲麻烦 :em09

Re: 数字运算问题

发表于 : 2011-07-19 15:35
fnan
修改了下代码:
videolength=$1
secs=`echo $videolength |cut -d. -f 1`
msecs=`echo $videolength |cut -d. -f 2`
vlen=$((${msecs##0}*10**(3-${#msecs})+$secs*1000))
echo $vlen

Re: 数字运算问题

发表于 : 2011-07-19 15:45
novesky
fnan 写了:乘1000,即小数只保留三位,不用bc就:
v=12.013;set ${v/./ };expr substr $1$2000 1 $((${#1}+3))
12013
好厉害!我板子上expr substr ${1}${2}000 1 $((${#1}+3)) 才行

Re: 数字运算问题

发表于 : 2011-07-19 16:03
fnan
板子需要超短代码?
set ${1/./ }000
echo $1${2:0:3}

Re: 数字运算问题

发表于 : 2011-07-19 23:06
novesky
fnan 写了:板子需要超短代码?
set ${1/./ }000
echo $1${2:0:3}
太崇拜你了!这些用法从来没见过!你是怎么学的呀?

Re: 数字运算问题

发表于 : 2011-07-19 23:25
fnan
novesky 写了:
fnan 写了:板子需要超短代码?
set ${1/./ }000
echo $1${2:0:3}
太崇拜你了!这些用法从来没见过!你是怎么学的呀?
装b小技罢了,写法几乎任何一本基础教程都有,怎样用就各人发挥了。