Refactor integer inputs

This commit is contained in:
faze-geek 2024-02-27 01:41:02 +05:30
parent 9437c99244
commit 5aaa39048e

View File

@ -137,12 +137,10 @@ void init_builtins(VM* _vm) {
_vm->bind(_vm->builtins, "round(x, ndigits=None)", [](VM* vm, ArgsView args) {
f64 x = CAST(f64, args[0]);
if(is_int(args[0])) return VAR(i64(x));
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){
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) 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){
return VAR((i64)(x * std::pow(10, ndigits) + 0.5) / std::pow(10, ndigits));