mirror of
https://github.com/nushell/nushell.git
synced 2025-01-25 15:51:28 +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 {
|
fn round_big_decimal(val: BigDecimal, precision: i64) -> Value {
|
||||||
if precision > 0 {
|
if precision > 0 {
|
||||||
UntaggedValue::decimal(val.round(precision)).into()
|
UntaggedValue::decimal(val.with_scale(precision + 1).round(precision)).into()
|
||||||
} else {
|
} 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()
|
UntaggedValue::int(rounded).into()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
mod avg;
|
mod avg;
|
||||||
mod eval;
|
mod eval;
|
||||||
mod median;
|
mod median;
|
||||||
|
mod round;
|
||||||
mod sum;
|
mod sum;
|
||||||
|
|
||||||
use nu_test_support::{nu, pipeline};
|
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