add a helper function 'TruncateDecimalString' to format amounts to specified decimal places

This commit is contained in:
Alfred Kamanda 2025-06-26 12:19:13 +03:00
parent 88926480dc
commit 280c382a3d
Signed by: Alfred-mk
GPG Key ID: 7EA3D01708908703

View File

@ -3,6 +3,7 @@ package store
import ( import (
"context" "context"
"errors" "errors"
"fmt"
"math/big" "math/big"
"reflect" "reflect"
"strconv" "strconv"
@ -20,6 +21,27 @@ type TransactionData struct {
ActiveAddress string ActiveAddress string
} }
// TruncateDecimalString safely truncates the input amount to the specified decimal places
func TruncateDecimalString(input string, decimalPlaces int) (string, error) {
num, ok := new(big.Float).SetString(input)
if !ok {
return "", fmt.Errorf("invalid input")
}
// Multiply by 10^decimalPlaces
scale := new(big.Float).SetInt(new(big.Int).Exp(big.NewInt(10), big.NewInt(int64(decimalPlaces)), nil))
scaled := new(big.Float).Mul(num, scale)
// Truncate by converting to int (chops off decimals)
intPart, _ := scaled.Int(nil)
// Divide back to get truncated float
truncated := new(big.Float).Quo(new(big.Float).SetInt(intPart), scale)
// Format with fixed decimals
return truncated.Text('f', decimalPlaces), nil
}
func ParseAndScaleAmount(storedAmount, activeDecimal string) (string, error) { func ParseAndScaleAmount(storedAmount, activeDecimal string) (string, error) {
// Parse token decimal // Parse token decimal
tokenDecimal, err := strconv.Atoi(activeDecimal) tokenDecimal, err := strconv.Atoi(activeDecimal)