This commit is contained in:
blueloveTH 2024-02-27 11:14:38 +08:00
parent 7e88c6522a
commit 46a804589c
2 changed files with 9 additions and 8 deletions

View File

@ -136,17 +136,14 @@ void init_builtins(VM* _vm) {
});
_vm->bind(_vm->builtins, "round(x, ndigits=None)", [](VM* vm, ArgsView args) {
if(is_int(args[0])) return args[0];
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));
f64 offset = x >= 0 ? 0.5 : -0.5;
if(args[1] == vm->None) return VAR((i64)(x + offset));
int ndigits = CAST(int, args[1]);
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));
}else{
return VAR((i64)(x * std::pow(10, ndigits) - 0.5) / std::pow(10, ndigits));
}
// ndigits > 0
return VAR((i64)(x * std::pow(10, ndigits) + offset) / std::pow(10, ndigits));
});
_vm->bind_func<1>(_vm->builtins, "abs", [](VM* vm, ArgsView args) {

View File

@ -1,6 +1,7 @@
assert round(23.2) == 23
assert round(23.8) == 24
assert round(-23.2) == -23
assert round(-23.2, 0) == -23.0
assert round(-23.8) == -24
assert round(23.2, 0) == 23.0
assert round(23.8, 0) == 24.0
@ -21,6 +22,9 @@ assert round(-3.14159, 3) == -3.142
assert round(-3.14159, 2) == -3.14
assert round(-3.14159, 1) == -3.1
assert round(-3.14159, 0) == -3
assert round(11, 0) == 11
assert round(11, 1) == 11
assert round(11, 234567890) == 11
a = [1,2,3,-1]
assert sorted(a) == [-1,1,2,3]