go-thousands/thousands.go
2025-06-08 19:21:34 +02:00

102 Zeilen
2,1 KiB
Go

package thousands
import (
"fmt"
"strings"
)
func Separate(Number interface{}, language ...string) (string, error) {
switch Number.(type) {
case int:
case int8:
case int16:
case int32:
case int64:
case float32:
case float64:
default:
return "", fmt.Errorf("no valid number format")
}
formattedNumber := fmt.Sprintf("%.2f", Number)
if len(language) < 1 {
language[0] = "en"
}
switch language[0] {
case "de":
formattedNumber = strings.ReplaceAll(formattedNumber, ",", ".")
numberLength := len(formattedNumber)
dec := ""
if strings.Index(formattedNumber, ".") != -1 {
dec = formattedNumber[strings.Index(formattedNumber, ".")+1 : numberLength]
formattedNumber = formattedNumber[0:strings.Index(formattedNumber, ".")]
}
for i := 0; i <= numberLength; i = i + 4 {
a := formattedNumber[0 : numberLength-i]
b := formattedNumber[numberLength-i : numberLength]
formattedNumber = a + "." + b
}
if formattedNumber[0:1] == "." {
formattedNumber = formattedNumber[1:numberLength]
}
if formattedNumber[numberLength-1:numberLength] == "." {
formattedNumber = formattedNumber[0 : numberLength-1]
}
if dec != "" {
formattedNumber = formattedNumber + "," + dec
}
return formattedNumber, nil
case "en":
formattedNumber = strings.ReplaceAll(formattedNumber, ",", "")
numberLength := len(formattedNumber)
dec := ""
if strings.Index(formattedNumber, ".") != -1 {
dec = formattedNumber[strings.Index(formattedNumber, ".")+1 : numberLength]
formattedNumber = formattedNumber[0:strings.Index(formattedNumber, ".")]
}
for i := 0; i <= numberLength; i = i + 4 {
a := formattedNumber[0 : numberLength-i]
b := formattedNumber[numberLength-i : numberLength]
formattedNumber = a + "," + b
}
if formattedNumber[0:1] == "," {
formattedNumber = formattedNumber[1:numberLength]
}
if formattedNumber[numberLength-1:numberLength] == "," {
formattedNumber = formattedNumber[0 : numberLength-1]
}
if dec != "" {
formattedNumber = formattedNumber + "." + dec
}
return formattedNumber, nil
}
return formattedNumber, nil
}