mirror of
https://github.com/pocketpy/pocketpy
synced 2025-10-19 19:10:17 +00:00
Floating inputs for round()
should return a Floating output when ndigit is 0 (#217)
* Fix round for floating inputs * Refactor integer inputs * some fix --------- Co-authored-by: blueloveTH <blueloveth@foxmail.com>
This commit is contained in:
parent
d8fb555258
commit
5100f4e454
@ -135,18 +135,15 @@ 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) {
|
||||
if(is_int(args[0])) return args[0];
|
||||
f64 x = CAST(f64, args[0]);
|
||||
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((i64)(x + 0.5)) : VAR((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) {
|
||||
|
@ -1,7 +1,12 @@
|
||||
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
|
||||
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
|
||||
@ -17,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]
|
||||
|
Loading…
x
Reference in New Issue
Block a user