]> Repositorios git - scryer-prolog.git/commitdiff
fix float formatting (#1331)
authorMark Thom <[email protected]>
Tue, 8 Mar 2022 02:44:31 +0000 (19:44 -0700)
committerMark Thom <[email protected]>
Tue, 8 Mar 2022 02:44:39 +0000 (19:44 -0700)
src/heap_print.rs
src/machine/system_calls.rs

index a0231848345717a87c38a49e44d8f7d57639f11d..b7ee855220c1c8b31b017ded815ee29d4a3703da 100644 (file)
@@ -484,6 +484,24 @@ macro_rules! print_char {
     };
 }
 
+pub fn fmt_float(mut fl: f64) -> String {
+    if OrderedFloat(fl) == -0f64 {
+        fl = 0f64;
+    }
+
+    if fl.fract() == 0f64 {
+        if fl.abs() >= 1.0e16 {
+            format!("{:.1e}", fl.trunc())
+        } else {
+            format!("{:.1}", fl.trunc())
+        }
+    } else if 0f64 < fl.fract().abs() && fl.fract().abs() <= 1.0e-16 {
+        format!("{0:.15e}", fl)
+    } else {
+        format!("{}", fl)
+    }
+}
+
 #[derive(Debug)]
 pub struct HCPrinter<'a, Outputter> {
     outputter: Outputter,
@@ -935,22 +953,8 @@ impl<'a, Outputter: HCValueOutputter> HCPrinter<'a, Outputter> {
 
         match n {
             NumberFocus::Unfocused(n) => match n {
-                Number::Float(OrderedFloat(mut fl)) => {
-                    if OrderedFloat(fl) == -0f64 {
-                        fl = 0f64;
-                    }
-
-                    let output_str = if fl.fract() == 0f64 {
-                        if fl.abs() >= 1.0e16 {
-                            format!("{:.1e}", fl.trunc())
-                        } else {
-                            format!("{:.1}", fl.trunc())
-                        }
-                    } else if 0f64 < fl.fract().abs() && fl.fract().abs() <= 1.0e-16 {
-                        format!("{:>1e}", fl)
-                    } else {
-                        format!("{}", fl)
-                    };
+                Number::Float(OrderedFloat(fl)) => {
+                    let output_str = fmt_float(fl);
 
                     push_space_if_amb!(self, &output_str, {
                         append_str!(self, &output_str);
index b8bd9063e8c8222e7d02d8a7d85b76afb8a95fd5..8dc8d4e8998aed63e6b901917397abe3d99eaca2 100644 (file)
@@ -1818,7 +1818,7 @@ impl Machine {
 
         let string = match Number::try_from(n) {
             Ok(Number::Float(OrderedFloat(n))) => {
-                format!("{0:<20?}", n)
+                fmt_float(n)
             }
             Ok(Number::Fixnum(n)) => n.get_num().to_string(),
             Ok(Number::Integer(n)) => n.to_string(),