Joshua Bronson <jabron...@gmail.com> added the comment:

This was so surprising to me that I had to check some other languages that I 
had handy. It turns out that not one of JavaScript, Ruby, Perl, C++, Java, Go, 
or Rust agrees with Python. In fact they all agreed with one another that 2.5 
should round to 3. Examples below.

I understand from 
https://github.com/cosmologicon/pywat/pull/40#discussion_r219962259 that "to 
always round up... can theoretically skew the data" but it's not clear why 
that's a good enough reason to differ from the "round" function in all these 
other languages (as opposed to e.g. offering this alternative behavior in some 
additional "round_unskewed" function).

I assume the rationale for having Python 3's "round" differ from that of so 
many other languages was written down when this decision was made, but I 
searched and couldn't find it. Could anyone link to it in a comment here?

And would it be worth including rationale and a larger callout in the 
https://docs.python.org/3/library/functions.html#round docs? The documentation 
of this behavior is a bit buried among other things, and the rationale for it 
is missing entirely.


$ node -e 'console.log(Math.round(2.5))'
3

$ ruby -e 'puts (2.5).round()'
3

$ perl -e 'use Math::Round; print round(2.5)'
3

$ cat test_round.cpp
#include <stdio.h>
#include <math.h>
int main(void) {
  printf("%f\n", round(2.5));
}
$ g++ test_round.cpp && ./a.out
3.000000

$ cat TestRound.java
class TestRound {
  public static void main(String[] args) {
    System.out.println(Math.round(2.5));
  }
}
$ javac TestRound.java && java TestRound
3

$ cat test_round.go
package main
import "fmt"
import "math"
func main() {
        fmt.Println(math.Round(2.5))
}
$ go build test_round.go && ./test_round
3

$ cat test_round.rs
fn main() {
  println!("{}", (2.5_f64).round());
}
$ rustc test_round.rs && ./test_round
3

----------
nosy: +jab

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue32956>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to