Skip to content

Commit d787fdb

Browse files
author
Hubert de La Jonquière
committed
Fix unprecised float number parsing
1 parent fa95afe commit d787fdb

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

grammar/fr/src/rules_number.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -195,27 +195,27 @@ pub fn rules_numbers(b: &mut RuleSetBuilder<Dimension>) -> RustlingResult<()> {
195195
FloatValue::new(value)
196196
});
197197
b.rule_3("number dot number",
198-
number_check!(|number: &NumberValue| !number.prefixed()),
198+
integer_check!(|integer: &IntegerValue| !integer.prefixed),
199199
b.reg(r#"virgule|point"#)?,
200-
number_check!(|number: &NumberValue| !number.suffixed()),
200+
integer_check!(|integer: &IntegerValue| !integer.suffixed),
201201
|a, _, b| {
202-
let power = b.value().value().to_string().chars().count();
203-
let coeff = 10.0_f64.powf(-1.0 * power as f64);
202+
let value: f64 = format!("{}.{}", a.value().value, b.value().value).parse()?;
204203
Ok(FloatValue {
205-
value: b.value().value() * coeff + a.value().value(),
204+
value,
206205
..FloatValue::default()
207206
})
208207
});
209208
b.rule_4("number dot zero ... number",
210-
number_check!(|number: &NumberValue| !number.prefixed()),
209+
integer_check!(|integer: &IntegerValue| !integer.prefixed),
211210
b.reg(r#"virgule|point"#)?,
212211
b.reg(r#"(?:(?:z[eé]ro )*(?:z[eé]ro))"#)?,
213-
number_check!(|number: &NumberValue| !number.suffixed()),
212+
integer_check!(|integer: &IntegerValue| !integer.suffixed),
214213
|a, _, zeros, b| {
215-
let power = zeros.group(0).split_whitespace().count() + b.value().value().to_string().chars().count();
216-
let coeff = 10.0_f64.powf(-1.0 * power as f64);
214+
let zeros_string = std::iter::repeat("0").take(zeros.group(0).split_whitespace().count()).collect::<String>();
215+
println!("{:?}", format!("{}.{}{}", a.value().value, zeros_string, b.value().value));
216+
let value: f64 = format!("{}.{}{}", a.value().value, zeros_string, b.value().value).parse()?;
217217
Ok(FloatValue {
218-
value: b.value().value() * coeff + a.value().value(),
218+
value,
219219
..FloatValue::default()
220220
})
221221
});

0 commit comments

Comments
 (0)