mirror of
https://github.com/PaddiM8/kalker.git
synced 2024-12-14 02:20:57 +01:00
Round result slightly to get a more 'lagom' amount of decimals
This commit is contained in:
parent
2f40c69883
commit
d1365b5982
@ -116,12 +116,12 @@ impl KalkNum {
|
|||||||
&value_string
|
&value_string
|
||||||
};
|
};
|
||||||
let value = match complex_number_type {
|
let value = match complex_number_type {
|
||||||
ComplexNumberType::Real => self.value.clone(),
|
ComplexNumberType::Real => &self.value,
|
||||||
ComplexNumberType::Imaginary => self.imaginary_value.clone(),
|
ComplexNumberType::Imaginary => &self.imaginary_value,
|
||||||
};
|
};
|
||||||
|
|
||||||
ScientificNotation {
|
ScientificNotation {
|
||||||
negative: value < 0f64,
|
negative: value < &0f64,
|
||||||
digits: trimmed
|
digits: trimmed
|
||||||
.to_string()
|
.to_string()
|
||||||
.replace(".", "")
|
.replace(".", "")
|
||||||
@ -134,10 +134,10 @@ impl KalkNum {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_string(&self) -> String {
|
pub fn to_string(&self) -> String {
|
||||||
let as_str = trim_number_string(&self.to_f64().to_string());
|
let as_str = format_number(self.to_f64());
|
||||||
|
|
||||||
if self.has_imaginary() {
|
if self.has_imaginary() {
|
||||||
let imaginary_as_str = trim_number_string(&self.imaginary_to_f64().abs().to_string());
|
let imaginary_as_str = format_number(self.imaginary_to_f64().abs());
|
||||||
let sign = if self.imaginary_value < 0f64 {
|
let sign = if self.imaginary_value < 0f64 {
|
||||||
"-"
|
"-"
|
||||||
} else {
|
} else {
|
||||||
@ -169,11 +169,11 @@ impl KalkNum {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_string_real(&self) -> String {
|
pub fn to_string_real(&self) -> String {
|
||||||
trim_number_string(&self.to_f64().to_string())
|
format_number(self.to_f64())
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn to_string_imaginary(&self, include_i: bool) -> String {
|
pub fn to_string_imaginary(&self, include_i: bool) -> String {
|
||||||
let value = trim_number_string(&self.imaginary_to_f64().to_string());
|
let value = format_number(self.imaginary_to_f64());
|
||||||
if include_i && value == "1" {
|
if include_i && value == "1" {
|
||||||
String::from("i")
|
String::from("i")
|
||||||
} else if include_i && value == "-1" {
|
} else if include_i && value == "-1" {
|
||||||
@ -190,7 +190,7 @@ impl KalkNum {
|
|||||||
let mut adjusted_num = self.clone();
|
let mut adjusted_num = self.clone();
|
||||||
let result_str = if (-6..8).contains(&sci_notation_real.exponent) || self.value == 0f64 {
|
let result_str = if (-6..8).contains(&sci_notation_real.exponent) || self.value == 0f64 {
|
||||||
self.to_string_real()
|
self.to_string_real()
|
||||||
} else if sci_notation_real.exponent <= -15 {
|
} else if sci_notation_real.exponent <= -14 {
|
||||||
adjusted_num.value = KalkNum::from(1f64).value;
|
adjusted_num.value = KalkNum::from(1f64).value;
|
||||||
String::from("0")
|
String::from("0")
|
||||||
} else {
|
} else {
|
||||||
@ -203,8 +203,8 @@ impl KalkNum {
|
|||||||
|| self.imaginary_value == 1f64
|
|| self.imaginary_value == 1f64
|
||||||
{
|
{
|
||||||
self.to_string_imaginary(true)
|
self.to_string_imaginary(true)
|
||||||
} else if sci_notation_imaginary.exponent <= -15 {
|
} else if sci_notation_imaginary.exponent <= -14 {
|
||||||
adjusted_num.imaginary_value = KalkNum::from(1f64).value;
|
adjusted_num.imaginary_value = KalkNum::from(0f64).value;
|
||||||
String::from("0")
|
String::from("0")
|
||||||
} else {
|
} else {
|
||||||
format!("{}", sci_notation_imaginary.to_string().trim())
|
format!("{}", sci_notation_imaginary.to_string().trim())
|
||||||
@ -240,8 +240,10 @@ impl KalkNum {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if let Some(estimate) = adjusted_num.estimate() {
|
if let Some(estimate) = adjusted_num.estimate() {
|
||||||
|
if estimate != output {
|
||||||
output.push_str(&format!(" ≈ {}", estimate));
|
output.push_str(&format!(" ≈ {}", estimate));
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
output
|
output
|
||||||
}
|
}
|
||||||
@ -572,14 +574,15 @@ impl KalkNum {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn trim_number_string(input: &str) -> String {
|
fn format_number(input: f64) -> String {
|
||||||
if input.contains(".") {
|
let rounded = format!("{:.1$}", input, 10);
|
||||||
input
|
if rounded.contains(".") {
|
||||||
|
rounded
|
||||||
.trim_end_matches('0')
|
.trim_end_matches('0')
|
||||||
.trim_end_matches('.')
|
.trim_end_matches('.')
|
||||||
.to_string()
|
.to_string()
|
||||||
} else {
|
} else {
|
||||||
input.into()
|
rounded.into()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -636,6 +639,7 @@ mod tests {
|
|||||||
fn test_to_string_pretty() {
|
fn test_to_string_pretty() {
|
||||||
let in_out = vec![
|
let in_out = vec![
|
||||||
(0.99999, 0.0, "0.99999 ≈ 1"),
|
(0.99999, 0.0, "0.99999 ≈ 1"),
|
||||||
|
(-0.99999, 0.0, "-0.99999 ≈ -1"),
|
||||||
(0.0, 0.99999, "0.99999i ≈ i"),
|
(0.0, 0.99999, "0.99999i ≈ i"),
|
||||||
(0.000000001, 0.0, "10^-9 ≈ 0"),
|
(0.000000001, 0.0, "10^-9 ≈ 0"),
|
||||||
(0.0, 0.000000001, "10^-9 i ≈ 0"),
|
(0.0, 0.000000001, "10^-9 i ≈ 0"),
|
||||||
@ -654,6 +658,7 @@ mod tests {
|
|||||||
(0.000000001, -1.0, "10^-9 - i ≈ -i"),
|
(0.000000001, -1.0, "10^-9 - i ≈ -i"),
|
||||||
(10e-17, 1.0, "i"),
|
(10e-17, 1.0, "i"),
|
||||||
(1.0, 10e-17, "1"),
|
(1.0, 10e-17, "1"),
|
||||||
|
(10e-15, 0.0, "0"),
|
||||||
];
|
];
|
||||||
for (real, imaginary, output) in in_out {
|
for (real, imaginary, output) in in_out {
|
||||||
let result = KalkNum::new_with_imaginary(
|
let result = KalkNum::new_with_imaginary(
|
||||||
|
Loading…
Reference in New Issue
Block a user