Documentation
      ¶
    
    
  
    
  
    Overview ¶
Example (Basic) ¶
This example demonstrates how to use the basic Calculate function
package main
import (
	"fmt"
	"github.com/ZHOUXING1997/math_calculation"
)
func main() {
	// Calculate a simple expression
	result, err := math_calculation.Calculate("sqrt(25) + 10", nil, nil)
	if err != nil {
		fmt.Printf("Error: %v\n", err)
		return
	}
	fmt.Printf("Result: %s\n", result)
}
Output: Result: 15
Example (Compilation) ¶
This example demonstrates how to pre-compile expressions for better performance
package main
import (
	"fmt"
	"github.com/shopspring/decimal"
	"github.com/ZHOUXING1997/math_calculation"
)
func main() {
	// Create calculator
	calc := math_calculation.NewCalculator(nil)
	// Compile expression once
	compiled, err := calc.Compile("x^2 + 2*x + 1")
	if err != nil {
		fmt.Printf("Compilation error: %v\n", err)
		return
	}
	// Evaluate with different variables
	for i := 1; i <= 3; i++ {
		result, _ := compiled.Evaluate(map[string]decimal.Decimal{
			"x": decimal.NewFromInt(int64(i)),
		})
		fmt.Printf("When x=%d: (x^2 + 2*x + 1) = %s\n", i, result)
	}
}
Output: When x=1: (x^2 + 2*x + 1) = 4 When x=2: (x^2 + 2*x + 1) = 9 When x=3: (x^2 + 2*x + 1) = 16
Example (FluentAPI) ¶
This example demonstrates how to use the fluent API
package main
import (
	"fmt"
	"github.com/shopspring/decimal"
	"github.com/ZHOUXING1997/math_calculation"
)
func main() {
	// Create calculator with fluent API
	calc := math_calculation.NewCalculator(nil)
	// Set variables and configuration
	result, err := calc.
		WithVariable("x", decimal.NewFromFloat(5.0)).
		WithPrecision(2).
		WithRoundPrecision().
		WithPrecisionFinalResult().
		Calculate("sqrt(x) * 2")
	if err != nil {
		fmt.Printf("Error: %v\n", err)
		return
	}
	fmt.Printf("sqrt(x) * 2 = %s\n", result)
}
Output: sqrt(x) * 2 = 4.47
Example (PrecisionModes) ¶
This example demonstrates how to use different precision modes
package main
import (
	"fmt"
	"github.com/ZHOUXING1997/math_calculation"
	"github.com/ZHOUXING1997/math_calculation/math_config"
)
func main() {
	expr := "1/3 + 1/3 + 1/3"
	// Round precision (default)
	round, _ := math_calculation.NewCalculator(nil).
		WithPrecision(2).
		WithPrecisionMode(math_config.RoundPrecision).
		WithPrecisionFinalResult().
		Calculate(expr)
	// Ceiling precision
	ceil, _ := math_calculation.NewCalculator(nil).
		WithPrecision(2).
		WithPrecisionMode(math_config.CeilPrecision).
		WithPrecisionFinalResult().
		Calculate(expr)
	// Floor precision
	floor, _ := math_calculation.NewCalculator(nil).
		WithPrecision(2).
		WithPrecisionMode(math_config.FloorPrecision).
		WithPrecisionFinalResult().
		Calculate(expr)
	fmt.Printf("Round: %s\n", round)
	fmt.Printf("Ceil: %s\n", ceil)
	fmt.Printf("Floor: %s\n", floor)
}
Output: Round: 1 Ceil: 1 Floor: 0.99
Example (WithVariables) ¶
This example demonstrates how to use variables in expressions
package main
import (
	"fmt"
	"github.com/shopspring/decimal"
	"github.com/ZHOUXING1997/math_calculation"
)
func main() {
	// Define variables
	vars := map[string]decimal.Decimal{
		"x": decimal.NewFromFloat(5.0),
		"y": decimal.NewFromFloat(3.0),
	}
	// Calculate expression with variables
	result, err := math_calculation.Calculate("x * y + 2", vars, nil)
	if err != nil {
		fmt.Printf("Error: %v\n", err)
		return
	}
	fmt.Printf("x * y + 2 = %s\n", result)
}
Output: x * y + 2 = 17
Index ¶
- func Calculate(expression string, vars map[string]decimal.Decimal, ...) (decimal.Decimal, error)
 - func CalculateParallel(expressions []string, vars map[string]decimal.Decimal, ...) ([]decimal.Decimal, []error)
 - func SetExprCacheCapacity(capacity int)
 - func SetLexerCacheCapacity(capacity int)
 - type Calculator
 - func (c *Calculator) Calculate(expression string) (decimal.Decimal, error)
 - func (c *Calculator) CalculateParallel(expressions []string) ([]decimal.Decimal, []error)
 - func (c *Calculator) CalculateWithDebug(expression string) (decimal.Decimal, *debug.DebugInfo, error)
 - func (c *Calculator) Compile(expression string) (*croe.CompiledExpression, error)
 - func (c *Calculator) GetLastDebugInfo() *debug.DebugInfo
 - func (c *Calculator) WithCache() *Calculator
 - func (c *Calculator) WithCeilPrecision() *Calculator
 - func (c *Calculator) WithDebugMode(mode math_config.DebugMode) *Calculator
 - func (c *Calculator) WithFloorPrecision() *Calculator
 - func (c *Calculator) WithMaxRecursionDepth(depth int) *Calculator
 - func (c *Calculator) WithPrecision(precision int32) *Calculator
 - func (c *Calculator) WithPrecisionEachStep() *Calculator
 - func (c *Calculator) WithPrecisionFinalResult() *Calculator
 - func (c *Calculator) WithPrecisionMode(mode math_config.PrecisionMode) *Calculator
 - func (c *Calculator) WithRoundPrecision() *Calculator
 - func (c *Calculator) WithTimeout(timeout time.Duration) *Calculator
 - func (c *Calculator) WithTruncatePrecision() *Calculator
 - func (c *Calculator) WithValidationOptions(options validator.ValidationOptions) *Calculator
 - func (c *Calculator) WithVariable(name string, value decimal.Decimal) *Calculator
 - func (c *Calculator) WithVariables(vars map[string]decimal.Decimal) *Calculator
 - func (c *Calculator) WithoutCache() *Calculator
 
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func Calculate ¶
func Calculate(expression string, vars map[string]decimal.Decimal, cfg *math_config.CalcConfig) (decimal.Decimal, error)
Calculate 计算表达式的便捷函数
func CalculateParallel ¶
func CalculateParallel(expressions []string, vars map[string]decimal.Decimal, cfg *math_config.CalcConfig) ([]decimal.Decimal, []error)
CalculateParallel 并行计算多个表达式
func SetExprCacheCapacity ¶
func SetExprCacheCapacity(capacity int)
func SetLexerCacheCapacity ¶
func SetLexerCacheCapacity(capacity int)
Types ¶
type Calculator ¶
type Calculator struct {
	// contains filtered or unexported fields
}
    Calculator 计算器结构体,支持链式API
func NewCalculator ¶
func NewCalculator(cfg *math_config.CalcConfig) *Calculator
NewCalculator 创建新的计算器实例
func (*Calculator) Calculate ¶
func (c *Calculator) Calculate(expression string) (decimal.Decimal, error)
Calculate 计算表达式
func (*Calculator) CalculateParallel ¶
func (c *Calculator) CalculateParallel(expressions []string) ([]decimal.Decimal, []error)
CalculateParallel 并行计算多个表达式
func (*Calculator) CalculateWithDebug ¶
func (c *Calculator) CalculateWithDebug(expression string) (decimal.Decimal, *debug.DebugInfo, error)
CalculateWithDebug 带调试信息的计算
func (*Calculator) Compile ¶
func (c *Calculator) Compile(expression string) (*croe.CompiledExpression, error)
Compile 预编译表达式
func (*Calculator) GetLastDebugInfo ¶
func (c *Calculator) GetLastDebugInfo() *debug.DebugInfo
GetLastDebugInfo 获取最后一次调试信息
func (*Calculator) WithCeilPrecision ¶
func (c *Calculator) WithCeilPrecision() *Calculator
WithCeilPrecision 设置精度模式为向上取整
func (*Calculator) WithDebugMode ¶
func (c *Calculator) WithDebugMode(mode math_config.DebugMode) *Calculator
WithDebugMode 设置调试模式
func (*Calculator) WithFloorPrecision ¶
func (c *Calculator) WithFloorPrecision() *Calculator
WithFloorPrecision 设置精度模式为向下取整
func (*Calculator) WithMaxRecursionDepth ¶
func (c *Calculator) WithMaxRecursionDepth(depth int) *Calculator
WithMaxRecursionDepth 设置最大递归深度
func (*Calculator) WithPrecision ¶
func (c *Calculator) WithPrecision(precision int32) *Calculator
WithPrecision 设置精度
func (*Calculator) WithPrecisionEachStep ¶
func (c *Calculator) WithPrecisionEachStep() *Calculator
WithPrecisionEachStep 在每一步应用精度控制
func (*Calculator) WithPrecisionFinalResult ¶
func (c *Calculator) WithPrecisionFinalResult() *Calculator
WithPrecisionFinalResult 只在最终结果应用精度控制
func (*Calculator) WithPrecisionMode ¶
func (c *Calculator) WithPrecisionMode(mode math_config.PrecisionMode) *Calculator
WithPrecisionMode 设置精度模式
func (*Calculator) WithRoundPrecision ¶
func (c *Calculator) WithRoundPrecision() *Calculator
WithRoundPrecision 设置精度模式为四舍五入
func (*Calculator) WithTimeout ¶
func (c *Calculator) WithTimeout(timeout time.Duration) *Calculator
WithTimeout 设置超时时间
func (*Calculator) WithTruncatePrecision ¶
func (c *Calculator) WithTruncatePrecision() *Calculator
WithTruncatePrecision 设置精度模式为截断(直接截断,不进行舍入)
func (*Calculator) WithValidationOptions ¶
func (c *Calculator) WithValidationOptions(options validator.ValidationOptions) *Calculator
WithValidationOptions 设置验证选项
func (*Calculator) WithVariable ¶
func (c *Calculator) WithVariable(name string, value decimal.Decimal) *Calculator
WithVariable 添加变量
func (*Calculator) WithVariables ¶
func (c *Calculator) WithVariables(vars map[string]decimal.Decimal) *Calculator
WithVariables 添加多个变量