mirror of
https://github.com/pocketpy/pocketpy
synced 2025-11-09 21:20:17 +00:00
Fix round for floating inputs
This commit is contained in:
parent
214395fab6
commit
9437c99244
@ -135,11 +135,13 @@ void init_builtins(VM* _vm) {
|
||||
return VAR(MappingProxy(mod));
|
||||
});
|
||||
|
||||
_vm->bind(_vm->builtins, "round(x, ndigits=0)", [](VM* vm, ArgsView args) {
|
||||
_vm->bind(_vm->builtins, "round(x, ndigits=None)", [](VM* vm, ArgsView args) {
|
||||
f64 x = CAST(f64, args[0]);
|
||||
if(args[1] == vm->None) return x >= 0 ? VAR((i64)(x + 0.5)) : VAR((i64)(x - 0.5));
|
||||
int ndigits = CAST(int, args[1]);
|
||||
if(ndigits == 0){
|
||||
return x >= 0 ? VAR((i64)(x + 0.5)) : VAR((i64)(x - 0.5));
|
||||
if(is_int(args[0])) return x >= 0 ? VAR((i64)(x + 0.5)) : VAR((i64)(x - 0.5));
|
||||
else return x >= 0 ? VAR(f64((i64)(x + 0.5))) : VAR(f64((i64)(x - 0.5)));
|
||||
}
|
||||
if(ndigits < 0) vm->ValueError("ndigits should be non-negative");
|
||||
if(x >= 0){
|
||||
|
||||
@ -2,6 +2,10 @@ assert round(23.2) == 23
|
||||
assert round(23.8) == 24
|
||||
assert round(-23.2) == -23
|
||||
assert round(-23.8) == -24
|
||||
assert round(23.2, 0) == 23.0
|
||||
assert round(23.8, 0) == 24.0
|
||||
assert round(-23.2, 0) == -23.0
|
||||
assert round(-23.8, 0) == -24.0
|
||||
# round with precision
|
||||
assert round(23.2, 1) == 23.2
|
||||
assert round(23.8, 1) == 23.8
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user