flexxui / pscript

Python to JavaScript compiler
http://pscript.readthedocs.io
BSD 2-Clause "Simplified" License
256 stars 25 forks source link

round function doesn't work as expected in Python #47

Open ikaradogan opened 3 years ago

ikaradogan commented 3 years ago

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.

almarklein commented 3 years ago

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!

pyxdroid commented 3 years ago

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));
}"""