pscript icon indicating copy to clipboard operation
pscript copied to clipboard

round function doesn't work as expected in Python

Open ikaradogan opened this issue 5 years ago • 2 comments

The round function takes one or two parameters in Python and one parameter in JavaScript. In Flexx, while using round with two parameter in PyWidget, the program does not fail, but in JS Widget it fails.

        rounded1 = round(number)
        # works with one parameter as expected either in Python or JavaScript

        rounded2 = round(number, decimals)
        # doesn't work on JS Widget, but works in PyWidget

        rounded3 = number.toFixed(decimals)
        # as toFixed is a JavaScript method that formats a number, it works on JS Widget,
        # but with a non-negative parameter and it gives fixed decimal digits

From what i see this line may need to be fixed.

ikaradogan avatar Oct 26 '20 11:10 ikaradogan

Thanks for the nice catch. I'm sure this is not the last discrepancy to be found :)

Yes, that line is where we could create a function instead of aliasing Math.round. I don't have much free cycles the coming weeks. A PR (by you, or anybody else) is welcome!

almarklein avatar Nov 02 '20 10:11 almarklein

Hi,
here is a short solution for stdlib.py. greets pyxdroid

FUNCTIONS['round'] = """function (x, dec) { // nargs: 1 2
return (x >= 0) ? (!dec ? Math.round(x) : Number(Math.round(x+'e'+dec)+'e-'+dec))
: (!dec ? Math.round(x-Number.EPSILON) : Number(Math.round(x-Number.EPSILON+'e'+dec)+'e-'+dec));
}"""

pyxdroid avatar Nov 24 '20 19:11 pyxdroid