藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月26日 11:18


請教數值格式顯示及expr不支持實數的問題,謝謝

當前數值如
a=100   
b=100.55
我想要得到
a=0010000
b=0010055
   
本來想先用*100的後再用printf得到
但才發現ksh 的 expr 居然不支持 實數
$expr $a \* 100
10000
$expr $b \* 100
expr: non-numeric argument

又用sed去掉.再printf
$c=`echo $a | sed 's/\.//g`
$d=`echo $b | sed 's/\.//g`
$echo $c $d | awk '{printf ("%07d\n%07d\n",$1,$2)}'
0000100
0010055

得到的結果d是對的,但c卻不是我想要的0010000
請問這該怎麼做啊,謝謝

請教數值格式顯示及expr不支持實數的問題,謝謝

echo $a $b | awk '{printf ("%07d\n%07d\n",$1*100,$2*100)}'

請教數值格式顯示及expr不支持實數的問題,謝謝

用bc嘛

請教數值格式顯示及expr不支持實數的問題,謝謝

沒想到expr不支持實數,但awk卻還能實現
bc確實不用會,可以請教一下嗎
$echo "111.123+111.345"|bc
222.468
我只想小數點前的222,請問該用BC怎麼做,想得到小數點後2位又怎麼做啊
找了篇貼子,但還是看不明白,不知道bc的scale用法


-->

請教數值格式顯示及expr不支持實數的問題,謝謝

echo "scale=0; (111.123+111.345)/1"|bc

有點怪~~~試試吧。

請教數值格式顯示及expr不支持實數的問題,謝謝

:em02:
echo "scale=0; (111.123+111.345)/1"|bc

-->

通過 修改scale=X來得到小數點後的位數, 但如果(111.123+111.345)/1不加 ()/1,就只能得到222.468..即前面的scale就無效...能解釋一下為什麼要加()/1嗎,謝謝 :em08:

請教數值格式顯示及expr不支持實數的問題,謝謝

我也是剛發現的,大概是除法運算可能損失精度,所以用scale來確定需要多少位吧。

請教數值格式顯示及expr不支持實數的問題,謝謝

如果不用除法就不能控制小數點位, BC還真是難以理解啊
希望找一貼詳細介紹BC的好貼來學學,呵呵



Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com