mirror of
https://github.com/storytold/pdfcraft.git
synced 2026-10-27 03:27:21 -06:00
Fix FormCalc Round overflowing to infinity for large values (#4508)
Found while testing crates/js/src/formcalc.rs:2114-2119 Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Haiku 5.5
parent
4f9b16fa14
commit
538eb1624b
@@ -2115,7 +2115,8 @@ impl Interp<'_> {
|
||||
let a = self.arg_num(args, 0)?;
|
||||
let places = if args.len() > 1 { self.arg_num(args, 1)?.clamp(0.0, 12.0) as i32 } else { 0 };
|
||||
let k = 10f64.powi(places);
|
||||
Val::Num((a * k).round() / k)
|
||||
let scaled = a * k;
|
||||
if scaled.is_finite() { Val::Num(scaled.round() / k) } else { Val::Num(a) }
|
||||
}
|
||||
"count" => {
|
||||
// Non-null values and objects: an empty field doesn't count, a subform does.
|
||||
|
||||
@@ -1009,6 +1009,12 @@ mod formcalc {
|
||||
assert_eq!(calc(r#"Format("9.99", 2.344)"#), "2.34");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn round_keeps_huge_values_finite() {
|
||||
assert_eq!(calc("Round(1e300, 12) == 1e300"), "1");
|
||||
assert_eq!(calc("Round(1.2345, 2)"), "1.23");
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn built_in_functions_cover_the_common_set() {
|
||||
assert_eq!(calc("Abs(-2.5)"), "2.5");
|
||||
|
||||
Reference in New Issue
Block a user