Visit Our UNIX and Linux User Community


Decimals in TCSH


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Decimals in TCSH
# 1  
Old 01-22-2010
Decimals in TCSH

Hello,
I want to run a loop with non-integer values (which I know I can't) so I've created a loop of integers and divided it by 10. However, these values are always rounded down to 1 significant figure. How do I get the script to keep and use the decimal value?

My script is as follows
Code:
# START RI LOOP
set RI_min = 10
set RI_max = 30
set RI_inc = 1

set RI = $RI_min
while ($RI <= $RI_max)

@ PI=$RI / 10
echo "PI = " $PI "g cm^-3"
echo $RI

RI now runs from 10 to 30 but PI is only ever 1, 2 or 3. Any ideas?
Thanks

Last edited by Scott; 01-22-2010 at 06:11 AM.. Reason: Please use code tags
# 2  
Old 01-22-2010
Hi.

Here's one alternative:
Code:
#!/usr/bin/env tcsh

# @(#) s1	Demonstrate alternative for tcsh floating-point arithmetic.

echo
setenv LC_ALL C ; setenv LANG C
echo "Environment: LC_ALL = $LC_ALL, LANG = $LANG"
echo "(Versions displayed with local utility version)"
sh -c "version >/dev/null 2>&1" && version "=o" tcsh
echo

alias acalc 'awk "BEGIN{ print \!* }" '

# START RI LOOP
set RI_min = 10
set RI_max = 30
set RI_inc = 1

set RI = $RI_min
while ($RI <= $RI_max)

# @ PI=$RI / 10
set PI = `acalc $RI / 10`
# echo "PI = " $PI "g cm^-3"
# echo $RI
echo " RI = $RI,  PI = " $PI "g cm^-3"
@ RI = $RI + $RI_inc

end

exit 0

producing:
Code:
% ./s1

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility version)
OS, ker|rel, machine: Linux, 2.6.26-2-amd64, x86_64
Distribution        : Debian GNU/Linux 5.0 
tcsh 6.14.00

 RI = 10,  PI =  1 g cm^-3
 RI = 11,  PI =  1.1 g cm^-3
 RI = 12,  PI =  1.2 g cm^-3
 RI = 13,  PI =  1.3 g cm^-3
 RI = 14,  PI =  1.4 g cm^-3
 RI = 15,  PI =  1.5 g cm^-3
 RI = 16,  PI =  1.6 g cm^-3
 RI = 17,  PI =  1.7 g cm^-3
 RI = 18,  PI =  1.8 g cm^-3
 RI = 19,  PI =  1.9 g cm^-3
 RI = 20,  PI =  2 g cm^-3
 RI = 21,  PI =  2.1 g cm^-3
 RI = 22,  PI =  2.2 g cm^-3
 RI = 23,  PI =  2.3 g cm^-3
 RI = 24,  PI =  2.4 g cm^-3
 RI = 25,  PI =  2.5 g cm^-3
 RI = 26,  PI =  2.6 g cm^-3
 RI = 27,  PI =  2.7 g cm^-3
 RI = 28,  PI =  2.8 g cm^-3
 RI = 29,  PI =  2.9 g cm^-3
 RI = 30,  PI =  3 g cm^-3

See Floating Point for a brief explanation of the alias.

Note that many people will advise you to avoid tcsh scripting. Using Bourne-shell relatives seems to work best for most projects. Here's an example of zsh illustrating built-in floating-point arithmetic (in later versions of ksh as well):
Code:
#!/usr/bin/env zsh

# @(#) s2	Demonstrate zsh floating-point arithmetic.

echo
set +o nounset
LC_ALL=C ; LANG=C ; export LC_ALL LANG
echo "Environment: LC_ALL = $LC_ALL, LANG = $LANG"
echo "(Versions displayed with local utility \"version\")"
version >/dev/null 2>&1 && version "=o" $(_eat $0 $1) ksh
set -o nounset

echo
i=1
while (( i < 3.0 ))
do
  print " i = $i"
  (( i+=0.5 ))
done

exit 0

producing:
Code:
% ./s2

Environment: LC_ALL = C, LANG = C
(Versions displayed with local utility "version")
OS, ker|rel, machine: Linux, 2.6.26-2-amd64, x86_64
Distribution        : Debian GNU/Linux 5.0 
zsh 4.3.6
ksh 93s+

 i = 1
 i = 1.5
 i = 2.
 i = 2.5

Best wishes ... cheers, drl

Previous Thread | Next Thread
Test Your Knowledge in Computers #363
Difficulty: Medium
uudecode originated in Version 1 AT&T UNIX.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

how to find the field has more than 2 decimals

Hi Gurus, I have below sample file, I need find the line which 2rd field has more than 2 decimals. in sample file, I need to find xyz, 123456.789 abc, 1234.45, def xyz, 123456.789, xxx bce, 1234.34, xxx thanks in advance (13 Replies)
Discussion started by: ken6503
13 Replies

2. Shell Programming and Scripting

Getting date in seconds with decimals

I am trying to get date to display decimal Desired output 1350386096256.12 I know this can be done with printf, but are not able to make it work. I have tested this and many otherprintf "%.2f" $(($(date +%s%N)/1000000)) (8 Replies)
Discussion started by: Jotne
8 Replies

3. Shell Programming and Scripting

Round up the decimals

Hi All, I would like to do the following in the shell script 561.76 to 562 I tried using this echo 'scale=0; 749 * 75 /100 ' | bc but just returned only 561 Please help me . I appreciate your help Thanks rajeevm (13 Replies)
Discussion started by: rajeevm
13 Replies

4. UNIX for Dummies Questions & Answers

Regarding Decimals in Cshell

Hello... I am new to unix and I am wondering if in a C-shell script , Are we supposed to use only whole numbers........ for example..if a program needs to calculate the average of some numbers........ @ avg = (($1 +$2 + $3)/3)) is returning a whole number.........How can a decimal be achieved... (1 Reply)
Discussion started by: ravindra22
1 Replies

5. Shell Programming and Scripting

convert Regular decimals to Packed decimals

Hi, I am trying to find if there is a way to convert regular decimal values to Paced decimal values. I tried to find a c program but I could get a Packed converted to regular decimal not the other way round. If not unix please let me know if any other progrimming language I can use to do... (2 Replies)
Discussion started by: mgirinath
2 Replies

6. Shell Programming and Scripting

removing and rounding up decimals

Hi Experts, I have a command that gives me the output as below root@ckpgpay11core> cat sara | awk '{ sum += $1} ; END { print sum }' | awk {'print $1/90'} 8.88889 how do i remove the decimal spaces so that the figure will round itself to 9? Thanks. (3 Replies)
Discussion started by: aismann
3 Replies

7. Shell Programming and Scripting

Bourne and decimals??

I need to get 15% of the variable exer1 to be added to other exercises so far, i've got exer1=$1 aver=`expr $exer \* .15` but i keep getting an error that an integer value was expected. Is there anyway around this? (1 Reply)
Discussion started by: kdyzsa
1 Replies

8. Shell Programming and Scripting

handle decimals

Hi All, How we can handle decimals in (Float) in UNIX. a=73 b=5 c=`expr a / b` i am getting 14 but i need full 14.6 . Can any one help me pls? (1 Reply)
Discussion started by: subin_bala
1 Replies

9. Shell Programming and Scripting

Multiplying Floats/Decimals

Is there a way that i can get something like this to work: Number=`expr 80 \* 10.69` i.e. To multiply an integer by a decimal or a decimal by a decimal etc...? thanks (10 Replies)
Discussion started by: rleebife
10 Replies

10. Shell Programming and Scripting

comparing two numbers with the decimals

Can someone tell me how do I comapre two numbers with the decimals in UNIX shell scripting I understand "-gt" can be used only for integers Regards, Giri (4 Replies)
Discussion started by: chittari
4 Replies

Featured Tech Videos