mirror of
https://github.com/nushell/nushell.git
synced 2025-01-11 08:48:23 +01:00
Stop nu panicks in math.round on a large decimal value(Most of the time) (#3224)
* Stop crashing when dealing with large numbers in math round * Fix formatting * add tests * just to trigger wasm build * trigger wasm build
This commit is contained in:
parent
c42b588782
commit
387098fc87
@ -76,9 +76,12 @@ fn round_big_int(val: BigInt) -> Value {
|
||||
|
||||
fn round_big_decimal(val: BigDecimal, precision: i64) -> Value {
|
||||
if precision > 0 {
|
||||
UntaggedValue::decimal(val.round(precision)).into()
|
||||
UntaggedValue::decimal(val.with_scale(precision + 1).round(precision)).into()
|
||||
} else {
|
||||
let (rounded, _) = val.round(precision).as_bigint_and_exponent();
|
||||
let (rounded, _) = val
|
||||
.with_scale(precision + 1)
|
||||
.round(precision)
|
||||
.as_bigint_and_exponent();
|
||||
UntaggedValue::int(rounded).into()
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,7 @@
|
||||
mod avg;
|
||||
mod eval;
|
||||
mod median;
|
||||
mod round;
|
||||
mod sum;
|
||||
|
||||
use nu_test_support::{nu, pipeline};
|
||||
|
21
crates/nu-command/tests/commands/math/round.rs
Normal file
21
crates/nu-command/tests/commands/math/round.rs
Normal file
@ -0,0 +1,21 @@
|
||||
use nu_test_support::nu;
|
||||
|
||||
#[test]
|
||||
fn can_round_very_large_numbers() {
|
||||
let actual = nu!(
|
||||
cwd: ".",
|
||||
"echo 18.1372544780074142289927665486772012345 | math round"
|
||||
);
|
||||
|
||||
assert_eq!(actual.out, "18")
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn can_round_very_large_numbers_with_precision() {
|
||||
let actual = nu!(
|
||||
cwd: ".",
|
||||
"echo 18.13725447800741422899276654867720121457878988 | math round -p 10"
|
||||
);
|
||||
|
||||
assert_eq!(actual.out, "18.137254478")
|
||||
}
|
Loading…
Reference in New Issue
Block a user