package main import ( "fmt" "github.com/fraktal/mev-beta/pkg/math" ) func main() { dc := math.NewDecimalConverter() // Test case: 0.01 ETH / 1 ETH = 1% numeratorStr := "10000000000000000" // 0.01 ETH in wei denominatorStr := "1000000000000000000" // 1 ETH in wei decimals := uint8(18) fmt.Printf("=== Debugging Percentage Calculation ===\n") fmt.Printf("Numerator string: %s\n", numeratorStr) fmt.Printf("Denominator string: %s\n", denominatorStr) fmt.Printf("Expected: 1%%\n\n") // Create numerator num, err := dc.FromString(numeratorStr, decimals, "ETH") if err != nil { fmt.Printf("ERROR creating numerator: %v\n", err) return } // Create denominator denom, err := dc.FromString(denominatorStr, decimals, "ETH") if err != nil { fmt.Printf("ERROR creating denominator: %v\n", err) return } fmt.Printf("Numerator value: %s\n", num.Value.String()) fmt.Printf("Denominator value: %s\n", denom.Value.String()) // Calculate percentage percentage, err := dc.CalculatePercentage(num, denom) if err != nil { fmt.Printf("ERROR calculating percentage: %v\n", err) return } fmt.Printf("Percentage raw value: %s\n", percentage.Value.String()) fmt.Printf("Percentage decimals: %d\n", percentage.Decimals) // Convert to float for display percentageFloat, _ := percentage.Value.Float64() // Since percentage has 4 decimal places, divide by 10000 to get actual percentage actualPercentage := percentageFloat / 10000.0 fmt.Printf("Actual percentage: %.6f%%\n", actualPercentage) // Manual calculation verification fmt.Printf("\n=== Manual Verification ===\n") fmt.Printf("10000000000000000 / 1000000000000000000 = 0.01\n") fmt.Printf("0.01 * 100 = 1%%\n") }