use emath::NumExt as _;
use crate::bounds::PlotPoint;
pub fn format_number(number: f64, num_decimals: usize) -> String {
let is_integral = number as i64 as f64 == number;
if is_integral {
format!("{number:.0}")
} else {
format!("{:.*}", num_decimals.at_least(1), number)
}
}
type LabelFormatterFn<'a> = dyn Fn(&str, &PlotPoint) -> String + 'a;
pub type LabelFormatter<'a> = Box<LabelFormatterFn<'a>>;
pub fn default_label_formatter(name: &str, value: &PlotPoint) -> String {
let prefix = if name.is_empty() {
String::new()
} else {
format!("{name}\n")
};
format!("{}x = {:.3}\ny = {:.3}", prefix, value.x, value.y)
}