Fix round for floating inputs

This commit is contained in:
faze-geek 2024-02-26 22:03:47 +05:30
parent 214395fab6
commit 9437c99244
2 changed files with 8 additions and 2 deletions

View File

@ -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){

View File

@ -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