Re: rounding
- To: mathgroup at smc.vnet.net
- Subject: [mg49526] Re: [mg49469] rounding
- From: Ramesh Raju Mudunuri <rmudunuri at uh.edu>
- Date: Thu, 22 Jul 2004 02:46:58 -0400 (EDT)
- References: <200407211039.GAA07808@smc.vnet.net>
- Reply-to: Ramesh Raju Mudunuri <rmudunuri at uh.edu>
- Sender: owner-wri-mathgroup at wolfram.com
Hi, With a little modification, your code will do what you wanted. Due to chopping and rounding errors your code does not work properly. You can use round[x_, y_] := (Round[x 10^y] 10^(-y)) // N where we first rationalize and then ask for the numerical value. You get the answer you are looking for through round[mylist,2]. A more elaborate way would be to define round2[x_?NumericQ, y_Integer?NonNegative] := ((Round[x*(10^y)])(10^(-y)) // N) /; ! IntegerQ[x] round2[x_?NumericQ, y_Integer?NonNegative] := x /; IntegerQ[x] and use Map as in Map[round2[#, 2] &, mylist] to round mylist (Conditions have been used to define round2, to let integers be as they are). Similar functions can be written to chop a real number to a given number of decimals, where IntegerPart is used instead of Round. Ramesh ----- Original Message ----- From: Amit Gandhi To: mathgroup at smc.vnet.net To: mathgroup at smc.vnet.net Sent: Wednesday, July 21, 2004 5:39 AM Subject: [mg49526] [mg49469] rounding Hello Group: I was wondering if anyone might be able to explain why mathematica does the following - In Mathematica I create a list of numbers as follows: mylist - Table[i, {i, 1., 8., .2}]; This produces {1., 1.2, 1.4, 1.6, 1.8, 2.05, 2.2, 2.4, 2.6, 2.8, 3., 3.2, 3.4, 3.6, 3.8, \ 4., 4.2, 4.4, 4.6, 4.8, 5., 5.2, 5.4, 5.6, 5.8, 6., 6.2, 6.4, 6.6, 6.8, 7., \ 7.2, 7.4, 7.6, 7.8, 8.} However if I try editing this output, it shows me that the full form of this list is: {1.`, 1.2`, 1.4000000000000001`, 1.6`, 1.8`, 2.05`, 2.2`, 2.4`, 2.6`, \ 2.8000000000000003`, 3.`, 3.2`, 3.4`, 3.6`, 3.8000000000000003`, 4.`, 4.2`, \ 4.4`, 4.6000000000000005`, 4.8`, 5.`, 5.2`, 5.4`, 5.6000000000000005`, 5.8`, \ 6.`, 6.2`, 6.4`, 6.6000000000000005`, 6.8`, 7.`, 7.2`, 7.4`, \ 7.6000000000000005`, 7.8`, 8.`} I would like this bottom list to be rounded so that the full form is equivalent to the first list. So I wrote a round function that rounds a real number to a specified number of decimal places: round[x_, place_] := (Round[x*(10.^place)])/(10.^place); so for instance round[3.456, 2] = 3.46. Now when I do round[mylist, 2], the full form of the numbers in the list continue to be {1.`, 1.2`, 1.4000000000000001`, 1.6`, 1.8`, 2.05`, 2.2`, 2.4`, 2.6`, \ 2.8000000000000003`, 3.`, 3.2`, 3.4`, 3.6`, 3.8000000000000003`, 4.`, 4.2`, \ 4.4`, 4.6000000000000005`, 4.8`, 5.`, 5.2`, 5.4`, 5.6000000000000005`, 5.8`, \ 6.`, 6.2`, 6.4`, 6.6000000000000005`, 6.8`, 7.`, 7.2`, 7.4`, \ 7.6000000000000005`, 7.8`, 8.`} Can anyone explain to me how to properly round numbers in mathematica. --Boundary_(ID_hdYnexqwD6R1NGQI2YKgiw) <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML><HEAD> <META http-equiv=Content-Type content="text/html; charset=iso-8859-1"> <META content="MSHTML 6.00.2800.1400" name=GENERATOR> <STYLE></STYLE> </HEAD> <BODY bgColor=#ffffff> <DIV><FONT face=Verdana size=2>Hi,</FONT></DIV> <DIV><FONT face=Verdana size=2>With a little modification, your code will do what you wanted. Due to </FONT></DIV> <DIV><FONT face=Verdana size=2>chopping and rounding errors your code does not work properly. </FONT></DIV> <DIV><FONT face=Verdana size=2>You can use</FONT></DIV> <DIV> </DIV> <DIV>round[x_, y_] := (Round[x 10^y] 10^(-y)) // N</DIV> <DIV> </DIV> <DIV><FONT face=Verdana size=2>where we first rationalize and then ask for the numerical value. You get the</FONT></DIV> <DIV><FONT face=Verdana size=2>answer you are looking for through round[mylist,2]. A more elaborate way</FONT></DIV> <DIV><FONT face=Verdana size=2>would be to define </FONT></DIV> <P>round2[x_?NumericQ, <BR>y_Integer?NonNegative] := ((Round[x*(10^y)])(10^(-y)) // N) /; ! IntegerQ[x]<BR>round2[x_?NumericQ, y_Integer?NonNegative] := x /; IntegerQ[x]</P> <DIV>and use Map as in</DIV> <DIV> </DIV> <DIV>Map[round2[#, 2] &, mylist] </DIV> <DIV> </DIV> <DIV><FONT face=Verdana size=2>to round mylist (Conditions have been used to define round2, to let integers</FONT></DIV> <DIV><FONT face=Verdana size=2>be as they are). </FONT><FONT face=Verdana size=2>Similar functions can be written to chop a real number </FONT><FONT face=Verdana size=2>to a </FONT></DIV> <DIV><FONT face=Verdana size=2>given number of decimals, where IntegerPart is used instead of Round.</FONT></DIV> <DIV><FONT face=Verdana size=2></FONT> </DIV> <DIV><FONT face=Verdana size=2></FONT> </DIV> <DIV><FONT face=Verdana size=2>Ramesh</FONT></DIV> <DIV><FONT face=Verdana size=2></FONT> </DIV> <DIV><FONT face=Verdana size=2></FONT> </DIV> <DIV><FONT face=Verdana size=2></FONT> </DIV> <BLOCKQUOTE style="PADDING-RIGHT: 0px; PADDING-LEFT: 5px; MARGIN-LEFT: 5px; BORDER-LEFT: #000000 2px solid; MARGIN-RIGHT: 0px"> <DIV style="FONT: 10pt arial">----- Original Message ----- </DIV> <DIV style="BACKGROUND: #e4e4e4; FONT: 10pt arial; font-color: black"><B>From:</B> To: mathgroup at smc.vnet.net <A title=akgandhi at uchicago.edu href="mailto:akgandhi at uchicago.edu">Amit Gandhi</A> </DIV> <DIV style="FONT: 10pt arial"><B>To:</B> <A title=mathgroup at smc.vnet.net href="mailto:mathgroup at smc.vnet.net">mathgroup at smc.vnet.net</A> </DIV> <DIV style="FONT: 10pt arial"><B>Sent:</B> Wednesday, July 21, 2004 5:39 AM</DIV> <DIV style="FONT: 10pt arial"><B>Subject:</B> [mg49469] rounding</DIV> <DIV><BR></DIV><BR><BR>Hello Group:<BR>I was wondering if anyone might be able to explain why mathematica <BR>does the following -<BR>In Mathematica I create a list of numbers as follows:<BR><BR>mylist - Table[i, {i, 1., 8., .2}];<BR><BR>This produces<BR><BR>{1., 1.2, 1.4, 1.6, 1.8, 2.05, 2.2, 2.4, 2.6, 2.8, 3., 3.2, 3.4, <BR>3.6, 3.8, \ 4., 4.2, 4.4, 4.6, 4.8, 5., 5.2, 5.4, 5.6, 5.8, 6., 6.2, <BR>6.4, 6.6, 6.8, 7., \ 7.2, 7.4, 7.6, 7.8, 8.}<BR><BR>However if I try editing this output, it shows me that the full form <BR>of this list is:<BR><BR>{1.`, 1.2`, 1.4000000000000001`, 1.6`, 1.8`, 2.05`, 2.2`, 2.4`, <BR>2.6`, \ 2.8000000000000003`, 3.`, 3.2`, 3.4`, 3.6`, <BR>3.8000000000000003`, 4.`, 4.2`, \ 4.4`, 4.6000000000000005`, 4.8`, <BR>5.`, 5.2`, 5.4`, 5.6000000000000005`, 5.8`, \ 6.`, 6.2`, 6.4`, <BR>6.6000000000000005`, 6.8`, 7.`, 7.2`, 7.4`, \ 7.6000000000000005`, <BR>7.8`, 8.`}<BR><BR>I would like this bottom list to be rounded so that the full form is <BR>equivalent to the first list. So I wrote a round function that <BR>rounds a real number to a specified number of decimal places:<BR><BR>round[x_, place_] := (Round[x*(10.^place)])/(10.^place);<BR><BR>so for instance round[3.456, 2] = 3.46.<BR><BR>Now when I do round[mylist, 2], the full form of the numbers in the <BR>list continue to be<BR><BR>{1.`, 1.2`, 1.4000000000000001`, 1.6`, 1.8`, 2.05`, 2.2`, 2.4`, <BR>2.6`, \ 2.8000000000000003`, 3.`, 3.2`, 3.4`, 3.6`, <BR>3.8000000000000003`, 4.`, 4.2`, \ 4.4`, 4.6000000000000005`, 4.8`, <BR>5.`, 5.2`, 5.4`, 5.6000000000000005`, 5.8`, \ 6.`, 6.2`, 6.4`, <BR>6.6000000000000005`, 6.8`, 7.`, 7.2`, 7.4`, \ 7.6000000000000005`, <BR>7.8`, 8.`}<BR><BR>Can anyone explain to me how to properly round numbers in mathematica.<BR></BLOCKQUOTE></BODY></HTML> --Boundary_(ID_hdYnexqwD6R1NGQI2YKgiw)--
- References:
- rounding
- From: Amit Gandhi <akgandhi@uchicago.edu>
- rounding