use rust_decimal::{Decimal, RoundingStrategy}; pub fn decimal(string_num: &String) -> Decimal { let mut temp_num = string_num.clone(); if temp_num.contains('.') { temp_num.remove(temp_num.find('.').unwrap()); } let decimal_num = temp_num.parse::().unwrap(); Decimal::from_i128_with_scale(decimal_num, floating_scale(string_num)) .round_dp_with_strategy(8, RoundingStrategy::ToZero) } fn floating_scale(string_num: &String) -> u32 { let temp_num = string_num.clone(); if temp_num.contains('.') { let len = temp_num.to_string().len(); let point_index = temp_num.find('.').unwrap(); (len - (point_index + 1)) as u32 } else { 0 } } pub fn decimal_mul(num1: Decimal, num2: Decimal) -> Decimal { (num1 * num2).round_dp_with_strategy(8, RoundingStrategy::ToZero) } pub fn decimal_add(num1: Decimal, num2: Decimal) -> Decimal { (num1 + num2).round_dp_with_strategy(8, RoundingStrategy::ToZero) } pub fn decimal_sub(num1: Decimal, num2: Decimal) -> Decimal { (num1 - num2).round_dp_with_strategy(8, RoundingStrategy::ToZero) } pub fn decimal_div(num1: Decimal, num2: Decimal) -> Decimal { (num1 / num2).round_dp_with_strategy(8, RoundingStrategy::ToZero) }