How to round up value upto 2 decimal places using sed?


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting How to round up value upto 2 decimal places using sed?
# 8  
Old 11-15-2013
Dear in2nix4life

but it is not working in below case, output should be "200.92" but it is giving "200.93"

Code:
#!/usr/bin/bash

a=15.42
b=13.03

c=`echo "scale=2;($a*$b)+.01" |bc -l`
echo $c


Last edited by Scott; 11-16-2013 at 01:17 AM.. Reason: Code tags
# 9  
Old 11-15-2013
Again, I think 0.005 is the correct value to add, not 0.01. 0.01 will round EVERY number up, 0.005 will only round up by halves. But then bc insists on outputting three or more digits and the number must be truncated after, try my code.
# 10  
Old 11-15-2013
If you really really really insist on a sed solution, try this as a starting point; you will need to extend it for further carry operations:
Code:
echo 205.5686 |  sed    's/\(\...\)[0-4].*/\1/;t;
         s/\(\..\)0.*/\11/;t
         s/\(\..\)1.*/\12/;t
         s/\(\..\)2.*/\13/;t
         s/\(\..\)3.*/\14/;t
         s/\(\..\)4.*/\15/;t
         s/\(\..\)5.*/\16/;t
         s/\(\..\)6.*/\17/;t
         s/\(\..\)7.*/\18/;t
         s/\(\..\)8.*/\19/;t
         s/\(\..\)9.*/\10/;t
        '
205.57

This User Gave Thanks to RudiC For This Post:
# 11  
Old 11-15-2013
Longhand using OSX 10.7.5, default bash terminal.
Code:
#!/bin/bash --posix
# Save IFS.
ifs_str="$IFS"
IFS="."
# Number with 3rd decinal place as 6. NOTE: no zero at the start but "-" instead!
summed_number=-.45677
# Create an array.
round=($summed_number)
# Ensure a roundup number!
roundup=9
# Print it to the terminal.
printf "%0.2f\n" ${round[0]}.${round[1]:0:2}$roundup
# Repeat above with 3rd decimal place as 3.
summed_number=1097.31367
round=($summed_number)
printf "%0.2f\n" ${round[0]}.${round[1]:0:2}$roundup
# Reset IFS.
IFS="$ifs_str"
# You now have the building blocks using bash builtins.
# I will leave you to create the required loops.

Results...
Code:
Last login: Fri Nov 15 18:44:29 on ttys000
AMIGA:barrywalker~> chmod 755 roundup.sh
AMIGA:barrywalker~> ./roundup.sh
-0.46
1097.32
AMIGA:barrywalker~> _

EDIT:

IMPORTANT! This does NOT account for +ve or -ve _integer_ numbers, zero and
floating point _equivalents_ of _integer_ numbers; so be well aware!

Last edited by wisecracker; 11-15-2013 at 06:06 PM.. Reason: Added a negative number to the code and EDIT...
This User Gave Thanks to wisecracker For This Post:
# 12  
Old 11-16-2013
If you have a large number of such numbers to process, you might be better off using the Korn shell, which has builtin floating point support, because of the overhead in invoking the bc utility.

For example:
Code:
#!/bin/ksh93

a=15.42
b=13.33

c=$(printf "%.2f\n"  $(( a * b ))) 
echo $c

outputs 205.55
This User Gave Thanks to fpmurphy For This Post:
# 13  
Old 11-16-2013
Since I do not like to use bc because its not in all image. And normal I use bash. To do use math I use awk. This should work in most image.
Sed is not tool for math, so I do not see any reason for using that.
Code:
a=15.42
b=13.33
c=$(awk -v a=$a -v b=$b 'BEGIN {printf "%.2f\n",a*b}')
echo c$
205.55

This User Gave Thanks to Jotne For This Post:
# 14  
Old 11-17-2013
Use bc for calculation, let printf do the rounding!
Code:
a=15.42
b=13.33
c=`echo "$a*$b" | bc -l`
printf "%.2f\n" $c

NB you must quote the expression, otherwise the shell tries to match a * against the current directory.
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sum the fields with 6 decimal places - getting only 2 decimal places as output

I used the below script to Sum up a field in a file based on some unique values. But the problem is when it is summing up the units, it is truncating to 2 decimals and not 6 decimals as in the input file (Input file has the units with up to 6 Decimals – Sample data below, when the units in the 2... (4 Replies)
Discussion started by: brlsubbu
4 Replies

2. Shell Programming and Scripting

Decimal field round of

Hi, I want to round of decimal numbers in comma seperated lines till 2 decimal numbers. line will be like. ... (4 Replies)
Discussion started by: vishal0746
4 Replies

3. Shell Programming and Scripting

Printing with decimal places from last 4 digits

I have input file like below, 201424|9999|OSS|622010|RGT|00378228764 201424|8888|OM|587079|RGT|00284329675 201424|7777|OM|587076|RGT|00128671024 201424|6666|OM|581528|RGT|00113552084 Output should be like below, should add decimal (.) from last 4 digits. ... (2 Replies)
Discussion started by: vinothsekark
2 Replies

4. Shell Programming and Scripting

Bash Rounding to 2 decimal places

I have a number in a bash variable n, and want to round it to 2 decimal places. How can I do that? n=0.0867268 Need to have num=0.09 (1 Reply)
Discussion started by: kristinu
1 Replies

5. Shell Programming and Scripting

Arithmetic but keep 2 decimal places

I am trying to perform arithmetric, for example, to increment the value of variable $a (say 3) by 0.05 but when I tried the following expression let a=a+0.05 or a=$((a+0.05)) both returned 3.0499999999999998 I want to keep 2 decimal places so it returns 3.05 instead. (6 Replies)
Discussion started by: piynik
6 Replies

6. Shell Programming and Scripting

Retain upto 2 decimal point for numeric values

Hi I have a big file with lines like below <tr align="center" bgcolor="SEASHELL"><td>94% </td><td>4.62178 </td><td>73.4375 </td></tr> <tr align="center" bgcolor="SEASHELL"></td><td>97% </td><td>3.2962 </td><td>125 </td></tr> I want to format the file such that i get like below. i.e... (3 Replies)
Discussion started by: ningy
3 Replies

7. Shell Programming and Scripting

Decimal places

i need to multiplay a number with 1.00.. so that the output should contain two decimal places at end.. for example... 236 * 1.00 = 236.00 245.8 * 1.00 = 245.80 but when i perform multiplication it shows output as. 236 245.8 can anyone help me to get the actual output of... (11 Replies)
Discussion started by: arunmanas
11 Replies

8. Shell Programming and Scripting

Four decimal places with awk

i have a script in which awk prints "($2-1700)/10000" and the answer is -0.07,but i want the answer in 4 decimal places. that is -0.0700. How can i sue awk to get my results in four decimal places (4 Replies)
Discussion started by: tomjones
4 Replies

9. Shell Programming and Scripting

Round off the a Decimal value.

HI, I have a script which is used to calculate the Memory & CPU utilization a server. memx=`ssh -l siebel1 ${f} /usr/sbin/prtconf|grep -i 'Memory size'|tr -s " "|/usr/xpg4/bin/awk -F" " '{print $3 * 1024}'` v5=`ssh -l siebel1 ${f} vmstat 1 2 | tail -1 | tr -s " " | /usr/xpg4/bin/awk -v... (3 Replies)
Discussion started by: dear_abhi2007
3 Replies
Login or Register to Ask a Question