Files
mev-beta/debug_percentage.go
2025-10-04 09:31:02 -05:00

61 lines
1.7 KiB
Go

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")
}