more fixes, still not done yet
This commit is contained in:
@@ -3,7 +3,7 @@ use rust_decimal::prelude::*;
|
||||
use rust_decimal::MathematicalOps;
|
||||
use std::str::FromStr;
|
||||
|
||||
/// Global precision setting for the current Steel execution context
|
||||
// Global precision setting for the current Steel execution context
|
||||
thread_local! {
|
||||
static PRECISION_CONTEXT: std::cell::RefCell<Option<u32>> = std::cell::RefCell::new(None);
|
||||
}
|
||||
@@ -105,44 +105,6 @@ pub fn decimal_div(a: String, b: String) -> Result<String, String> {
|
||||
Ok(format_result(a_dec / b_dec))
|
||||
}
|
||||
|
||||
// Precision-specific operations (explicit precision override)
|
||||
pub fn decimal_add_p(a: String, b: String, precision: u32) -> Result<String, String> {
|
||||
let a_dec = parse_decimal(&a)?;
|
||||
let b_dec = parse_decimal(&b)?;
|
||||
let result = a_dec + b_dec;
|
||||
|
||||
Ok(result.round_dp(precision).to_string())
|
||||
}
|
||||
|
||||
pub fn decimal_sub_p(a: String, b: String, precision: u32) -> Result<String, String> {
|
||||
let a_dec = parse_decimal(&a)?;
|
||||
let b_dec = parse_decimal(&b)?;
|
||||
let result = a_dec - b_dec;
|
||||
|
||||
Ok(result.round_dp(precision).to_string())
|
||||
}
|
||||
|
||||
pub fn decimal_mul_p(a: String, b: String, precision: u32) -> Result<String, String> {
|
||||
let a_dec = parse_decimal(&a)?;
|
||||
let b_dec = parse_decimal(&b)?;
|
||||
let result = a_dec * b_dec;
|
||||
|
||||
Ok(result.round_dp(precision).to_string())
|
||||
}
|
||||
|
||||
pub fn decimal_div_p(a: String, b: String, precision: u32) -> Result<String, String> {
|
||||
let a_dec = parse_decimal(&a)?;
|
||||
let b_dec = parse_decimal(&b)?;
|
||||
|
||||
if b_dec.is_zero() {
|
||||
return Err("Division by zero".to_string());
|
||||
}
|
||||
|
||||
let result = a_dec / b_dec;
|
||||
|
||||
Ok(result.round_dp(precision).to_string())
|
||||
}
|
||||
|
||||
// Precision control functions
|
||||
pub fn set_precision(precision: u32) -> String {
|
||||
if precision > 28 {
|
||||
|
||||
@@ -10,7 +10,6 @@ impl FunctionRegistry {
|
||||
/// Register all decimal math functions with the Steel VM
|
||||
pub fn register_all(vm: &mut Engine) {
|
||||
Self::register_basic_arithmetic(vm);
|
||||
Self::register_precision_arithmetic(vm);
|
||||
Self::register_precision_control(vm);
|
||||
Self::register_advanced_math(vm);
|
||||
Self::register_trigonometric(vm);
|
||||
@@ -29,14 +28,6 @@ impl FunctionRegistry {
|
||||
vm.register_fn("decimal-div", decimal_div);
|
||||
}
|
||||
|
||||
/// Register precision-specific arithmetic functions
|
||||
pub fn register_precision_arithmetic(vm: &mut Engine) {
|
||||
vm.register_fn("decimal-add-p", decimal_add_p);
|
||||
vm.register_fn("decimal-sub-p", decimal_sub_p);
|
||||
vm.register_fn("decimal-mul-p", decimal_mul_p);
|
||||
vm.register_fn("decimal-div-p", decimal_div_p);
|
||||
}
|
||||
|
||||
/// Register precision control functions
|
||||
pub fn register_precision_control(vm: &mut Engine) {
|
||||
vm.register_fn("set-precision", set_precision);
|
||||
|
||||
Reference in New Issue
Block a user