Hello,
I need a round function that _always_ rounds to the higher integer if
the argument is equidistant between two integers. In Python 3.0, this
is not the advertised behavior of the built-in function round() as
seen below:
>>round(0.5)
0
>>round(1.5)
2
>>round(2.5)
2
I would think this is a common need, but I cannot find a function in
the Python library to do it. I wrote my own, but did I miss such a
method in my search of the Python library?
Thanks 9 6435
josh logan wrote:
Hello,
I need a round function that _always_ rounds to the higher integer if
the argument is equidistant between two integers. In Python 3.0, this
is not the advertised behavior of the built-in function round() as
seen below:
>>>round(0.5)
0
>>>round(1.5)
2
>>>round(2.5)
2
Huh?
>>round(2.5)
3.0
Works for me on Python 2.5 on Linux running on "Intel(R) Core(TM)2 Duo
CPU". What system are you on?
It could be that 2.5 is really 2.49999... which would round down to 2,
but on any modern CPU (using IEEE floating point), 2.5 should be
representable exactly.
However, as with any floating point calculations, if you expect exact
representation or calculations with any numbers, then you are misusing
floating points.
Gary Herron
I would think this is a common need, but I cannot find a function in
the Python library to do it. I wrote my own, but did I miss such a
method in my search of the Python library?
Thanks
-- http://mail.python.org/mailman/listinfo/python-list
it could be that 3.0 is using "banker's rounding" --- rounding to the
even digit. the idea behind it behind it being to reduce error
accumulation when working with large sets of values.
Works for me on Python 2.5 on Linux running on "Intel(R) Core(TM)2 Duo
CPU". What system are you on?
It could be that 2.5 is really 2.49999... which would round down to 2,
but on any modern CPU (using IEEE floating point), 2.5 should be
representable exactly.
On Jul 27, 7:58*pm, Gary Herron <gher...@islandtraining.comwrote:
josh logan wrote:
Hello,
I need a round function that _always_ rounds to the higher integer if
the argument is equidistant between two integers. In Python 3.0, this
is not the advertised behavior of the built-in function round() as
seen below:
>>round(0.5)
0
>>round(1.5)
2
>>round(2.5)
2
Huh?
*>>round(2.5)
3.0
Works for me on Python 2.5 on Linux running on "Intel(R) Core(TM)2 Duo
CPU". *What system are you on?
It could be that 2.5 is really 2.49999... which would round down to 2,
but on any modern CPU (using IEEE floating point), 2.5 should be
representable exactly.
However, as with any floating point calculations, if you expect exact
representation or calculations with any numbers, then you are misusing
floating points.
Gary Herron
I would think this is a common need, but I cannot find a function in
the Python library to do it. I wrote my own, but did I miss such a
method in my search of the Python library?
Thanks
-- http://mail.python.org/mailman/listinfo/python-list
I should reiterate that I am using Python 3.0 and not Python 2.x.
It looks like the behavior round() has changed between these two
versions.
Here is the documentation for round() in Python 3.0: http://docs.python.org/dev/3.0/libra...ons.html#round
Of interest in this discussion is the second paragraph, which explains
the change:
Does anyone know the reason behind this change, and what replacement
method I can use to get the original behavior?
On Jul 27, 8:45*pm, pigmartian <scottp...@comcast.netwrote:
it could be that 3.0 is using "banker's rounding" --- rounding to the
even digit. *the idea behind it behind it being to reduce error
accumulation when working with large sets of values.
Works for me on Python 2.5 on Linux running on "Intel(R) Core(TM)2 Duo
CPU". *What system are you on?
It could be that 2.5 is really 2.49999... which would round down to 2,
but on any modern CPU (using IEEE floating point), 2.5 should be
representable exactly.
That's exactly what's happening, pigmartian. Thank you for explaining
the reasoning behind this change.
So am I relegated to building my own round() function that behaves
like the original function? Or did they move the functionality to a
new method somewhere for backwards-compatibility?
Gary Herron wrote:
josh logan wrote:
>I need a round function that _always_ rounds to the higher integer if the argument is equidistant between two integers. In Python 3.0, this is not the advertised behavior of the built-in function round() as seen below:
>>>>round(2.5) >
2
Huh?
>>round(2.5)
3.0
As the OP said, PY 3.0, where statisticians' unbiased round to even was
explicitly adopted. (I think before it was maybe left to the C library?)
>I would think this is a common need,
If you need any particular rounding for legal/finance-rule reasons, you
probably need the decimal module, which has several rounding modes and
other features catering to money calculation rules.
For general data analysis with floats, round to even is better.
tjr
josh logan wrote:
Hello,
I need a round function that _always_ rounds to the higher integer if
the argument is equidistant between two integers. In Python 3.0, this
is not the advertised behavior of the built-in function round() as
seen below:
>>>round(0.5)
0
>>>round(1.5)
2
>>>round(2.5)
2
I would think this is a common need, but I cannot find a function in
the Python library to do it. I wrote my own, but did I miss such a
method in my search of the Python library?
Thanks
I think what you want is something like:
math.ceil(x-0.4999999999999)
-Larry
On Jul 27, 8:55*pm, Larry Bates <larry.ba...@websafe.com`wrote:
josh logan wrote:
Hello,
I need a round function that _always_ rounds to the higher integer if
the argument is equidistant between two integers. In Python 3.0, this
is not the advertised behavior of the built-in function round() as
seen below:
>>round(0.5)
0
>>round(1.5)
2
>>round(2.5)
2
I would think this is a common need, but I cannot find a function in
the Python library to do it. I wrote my own, but did I miss such a
method in my search of the Python library?
Thanks
I think what you want is something like:
math.ceil(x-0.4999999999999)
-Larry- Hide quoted text -
- Show quoted text -
The version I learned back in my FORTRAN days was:
int(x + 0.5)
-- Paul
josh logan wrote:
On Jul 27, 8:45 pm, pigmartian <scottp...@comcast.netwrote:
>it could be that 3.0 is using "banker's rounding" --- rounding to the even digit. the idea behind it behind it being to reduce error accumulation when working with large sets of values.
>>Works for me on Python 2.5 on Linux running on "Intel(R) Core(TM)2 Duo CPU". What system are you on?
It could be that 2.5 is really 2.49999... which would round down to 2, but on any modern CPU (using IEEE floating point), 2.5 should be representable exactly.
That's exactly what's happening, pigmartian. Thank you for explaining
the reasoning behind this change.
So am I relegated to building my own round() function that behaves
like the original function? Or did they move the functionality to a
new method somewhere for backwards-compatibility?
This will work as you wish:
math.floor(x+0.5)
Gary Herron
-- http://mail.python.org/mailman/listinfo/python-list
On Jul 28, 12:34*am, Gary Herron <gher...@islandtraining.comwrote:
This will work as you wish:
* math.floor(x+0.5)
This works fine for positive x but what about negative:
>>round(2.5)
3.0
>>floor(2.5 + 0.5)
3.0
>>round(-2.5)
-3.0
>>floor(-2.5 + 0.5)
-2.0
Maybe:
def round2(x):
return math.floor(x + (0.5 if x >= 0 else -0.5)) This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: nomenklatura |
last post by:
Hi,
System.Math.Round function is confused me.
for example i want to round 3.245 in with decimal symbol
Result should be = 3.25
When i try to this in vb:
A = 3.245
X = Round(A, 2)
then...
|
by: Ronald W. Roberts |
last post by:
I'm having a problem understanding the Round function. Below are quotes
from two
books on VB.NET. The first book shows examples with one argument and
how it
rounds. The second book something...
|
by: Paul |
last post by:
I can't round my numbers. i have a single, and i'm trying to round it so that
there's only one decimal place. here's what i've tried:
..Val = CStr(Format(sngTimeToTarget, "#0.0"))
and i also...
|
by: Chris Davoli |
last post by:
The folllowing will round to 526, but it should round to 527. It works
correctly for all other numbers, except for this one. Does anybody know of a
bug in Math.Round?
Dim ldecWater As Decimal =...
|
by: Zeng |
last post by:
Math.Round has good behavior as following:
Math.Round(3.45, 1); //Returns 3.4. The last '5' is thrown away because 4 is
even
Math.Round(3.75, 1); //Returns 3.8. The last '5' is used because '7'...
|
by: Jassim Rahma |
last post by:
I have a number, for example 0.152 or 1.729 and I want to allow to round to
the first 0.010 or 0.050 or 0.100
|
by: =?Utf-8?B?UmVuZQ==?= |
last post by:
Hello everyone
I have a problem with Math.Round, it´s ocurring some strange:
Math.Round(12.985) = 12.98, it´s wrong. It should be: 12.99
Why?? What is the problem?
Help ME !!!!
|
by: Maric Michaud |
last post by:
Le Monday 28 July 2008 02:35:08 Herman, vous avez écrit :
Hmm, I don't have the same result in python2.6, I suspect it's a floating
point precision problem, try just to type "0.5" in the console...
|
by: karthickkuchanur |
last post by:
Hai All
I am ask to do the rounding the Double value
Value =16.415;
public static double roundoff(double value,int roundingFactor){
double roundOffValue;
BigDecimal bigdecimal = new...
|
by: Naresh1 |
last post by:
What is WebLogic Admin Training?
WebLogic Admin Training is a specialized program designed to equip individuals with the skills and knowledge required to effectively administer and manage Oracle...
|
by: antdb |
last post by:
Ⅰ. Advantage of AntDB: hyper-convergence + streaming processing engine
In the overall architecture, a new "hyper-convergence" concept was proposed, which integrated multiple engines and...
|
by: WisdomUfot |
last post by:
It's an interesting question you've got about how Gmail hides the HTTP referrer when a link in an email is clicked. While I don't have the specific technical details, Gmail likely implements measures...
|
by: Oralloy |
last post by:
Hello Folks,
I am trying to hook up a CPU which I designed using SystemC to I/O pins on an FPGA.
My problem (spelled failure) is with the synthesis of my design into a bitstream, not the C++...
|
by: Carina712 |
last post by:
Setting background colors for Excel documents can help to improve the visual appeal of the document and make it easier to read and understand. Background colors can be used to highlight important...
|
by: Ricardo de Mila |
last post by:
Dear people, good afternoon...
I have a form in msAccess with lots of controls and a specific routine must be triggered if the mouse_down event happens in any control.
Than I need to discover what...
|
by: ezappsrUS |
last post by:
Hi,
I wonder if someone knows where I am going wrong below. I have a continuous form and two labels where only one would be visible depending on the checkbox being checked or not. Below is the...
|
by: DizelArs |
last post by:
Hi all)
Faced with a problem, element.click() event doesn't work in Safari browser.
Tried various tricks like emulating touch event through a function:
let clickEvent = new Event('click', {...
|
by: F22F35 |
last post by:
I am a newbie to Access (most programming for that matter). I need help in creating an Access database that keeps the history of each user in a database. For example, a user might have lesson 1 sent...
| |