|
1 | | -use std::f32; |
| 1 | +use std::f64; |
2 | 2 | use rustling::*; |
3 | 3 | use rustling_ontology_values::dimension::*; |
4 | 4 | use rustling_ontology_values::helpers; |
@@ -191,39 +191,39 @@ pub fn rules_numbers(b: &mut RuleSetBuilder<Dimension>) -> RustlingResult<()> { |
191 | 191 | b.reg(r#"(\d*,\d+)"#)?, |
192 | 192 | |text_match| { |
193 | 193 | let reformatted_string = text_match.group(1).replace(",", "."); |
194 | | - let value: f32 = reformatted_string.parse()?; |
| 194 | + let value: f64 = reformatted_string.parse()?; |
195 | 195 | FloatValue::new(value) |
196 | 196 | }); |
197 | 197 | b.rule_3("number dot number", |
198 | | - number_check!(|number: &NumberValue| !number.prefixed()), |
| 198 | + integer_check!(|integer: &IntegerValue| !integer.prefixed), |
199 | 199 | b.reg(r#"virgule|point"#)?, |
200 | | - number_check!(|number: &NumberValue| !number.suffixed()), |
| 200 | + integer_check!(|integer: &IntegerValue| !integer.suffixed), |
201 | 201 | |a, _, b| { |
202 | | - let power = b.value().value().to_string().chars().count(); |
203 | | - let coeff = 10.0_f32.powf(-1.0 * power as f32); |
| 202 | + let value: f64 = format!("{}.{}", a.value().value, b.value().value).parse()?; |
204 | 203 | Ok(FloatValue { |
205 | | - value: b.value().value() * coeff + a.value().value(), |
| 204 | + value, |
206 | 205 | ..FloatValue::default() |
207 | 206 | }) |
208 | 207 | }); |
209 | 208 | b.rule_4("number dot zero ... number", |
210 | | - number_check!(|number: &NumberValue| !number.prefixed()), |
| 209 | + integer_check!(|integer: &IntegerValue| !integer.prefixed), |
211 | 210 | b.reg(r#"virgule|point"#)?, |
212 | 211 | b.reg(r#"(?:(?:z[eé]ro )*(?:z[eé]ro))"#)?, |
213 | | - number_check!(|number: &NumberValue| !number.suffixed()), |
| 212 | + integer_check!(|integer: &IntegerValue| !integer.suffixed), |
214 | 213 | |a, _, zeros, b| { |
215 | | - let power = zeros.group(0).split_whitespace().count() + b.value().value().to_string().chars().count(); |
216 | | - let coeff = 10.0_f32.powf(-1.0 * power as f32); |
| 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()?; |
217 | 217 | Ok(FloatValue { |
218 | | - value: b.value().value() * coeff + a.value().value(), |
| 218 | + value, |
219 | 219 | ..FloatValue::default() |
220 | 220 | }) |
221 | 221 | }); |
222 | 222 | b.rule_1_terminal("decimal with thousands separator", |
223 | 223 | b.reg(r#"(\d+(\.\d\d\d)+,\d+)"#)?, |
224 | 224 | |text_match| { |
225 | 225 | let reformatted_string = text_match.group(1).replace(".", "").replace(",", "."); |
226 | | - let value: f32 = reformatted_string.parse()?; |
| 226 | + let value: f64 = reformatted_string.parse()?; |
227 | 227 | FloatValue::new(value) |
228 | 228 | }); |
229 | 229 | b.rule_2("numbers prefix with -, negative or minus", |
@@ -293,7 +293,7 @@ pub fn rules_numbers(b: &mut RuleSetBuilder<Dimension>) -> RustlingResult<()> { |
293 | 293 | .into() |
294 | 294 | } |
295 | 295 | NumberValue::Float(float) => { |
296 | | - let product = float.value * (multiplier as f32); |
| 296 | + let product = float.value * (multiplier as f64); |
297 | 297 | if product.floor() == product { |
298 | 298 | IntegerValue { |
299 | 299 | value: product as i64, |
@@ -470,7 +470,7 @@ pub fn rules_numbers(b: &mut RuleSetBuilder<Dimension>) -> RustlingResult<()> { |
470 | 470 | integer_check_by_range!(0, 99), |
471 | 471 | b.reg(r#"et demie?"#)?, |
472 | 472 | |integer, _| { |
473 | | - FloatValue::new(integer.value().value as f32 + 0.5) |
| 473 | + FloatValue::new(integer.value().value as f64 + 0.5) |
474 | 474 | } |
475 | 475 | ); |
476 | 476 | b.rule_1_terminal("70, 80, 90 (Belgium and Switzerland)", |
@@ -697,7 +697,7 @@ pub fn rules_numbers(b: &mut RuleSetBuilder<Dimension>) -> RustlingResult<()> { |
697 | 697 | integer_check_by_range!(0, 99), |
698 | 698 | b.reg(r#"et demie?"#)?, |
699 | 699 | |integer, _| { |
700 | | - FloatValue::new(integer.value().value as f32 + 0.5) |
| 700 | + FloatValue::new(integer.value().value as f64 + 0.5) |
701 | 701 | } |
702 | 702 | ); |
703 | 703 | b.rule_1_terminal("70, 80, 90 (Belgium and Switzerland)", |
|
0 commit comments