parent
593b4ac3ba
commit
96f395dc52
|
@ -0,0 +1,169 @@
|
|||
package gn
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"math"
|
||||
"strconv"
|
||||
"strings"
|
||||
)
|
||||
|
||||
// Prsfloat return the float64 value parsing geez string g.
|
||||
func Prsfloat(g string) float64 {
|
||||
if !strings.Contains(g, ".") {
|
||||
//i, _ := strconv.Atoi(str)
|
||||
i := Prsint(g)
|
||||
f := float64(i)
|
||||
return f
|
||||
}
|
||||
strs := strings.Split(g, ".")
|
||||
s0 := Prsint(strs[0])
|
||||
s1 := Prsint(strs[1])
|
||||
res := fmt.Sprint(s0) + "." + fmt.Sprint(s1)
|
||||
f, _ := strconv.ParseFloat(res, 64)
|
||||
return f
|
||||
}
|
||||
|
||||
// Prsint return the intiger value parsing geez string g.
|
||||
func Prsint(g string) int {
|
||||
if strings.Contains(g, ".") {
|
||||
return 0
|
||||
}
|
||||
var signed bool
|
||||
if len(g) > 1 && g[0] == '-' {
|
||||
g = g[1:]
|
||||
signed = true
|
||||
}
|
||||
lst := strings.SplitAfter(g, "፻")
|
||||
var zz []int
|
||||
for idx, x := range lst {
|
||||
var z1, z2 int
|
||||
if strings.Contains(x, "፻") {
|
||||
if x == "፻" {
|
||||
y := prsrune('፩')
|
||||
z1 = y * int(math.Pow10(2*((len(lst)-1)-idx)))
|
||||
} else {
|
||||
l := strings.Split(x, "፻")
|
||||
for _, v := range l[0] {
|
||||
y := prsrune(v)
|
||||
y = y * int(math.Pow10(2*((len(lst)-1)-idx)))
|
||||
z1 += y
|
||||
}
|
||||
}
|
||||
zz = append(zz, z1)
|
||||
} else {
|
||||
for _, v := range x {
|
||||
y := prsrune(v)
|
||||
y = y * int(math.Pow10(2*((len(lst)-1)-idx)))
|
||||
z2 += y
|
||||
}
|
||||
zz = append(zz, z2)
|
||||
}
|
||||
}
|
||||
var i int
|
||||
for _, v := range zz {
|
||||
i += v
|
||||
}
|
||||
if signed {
|
||||
i = -1 * i
|
||||
}
|
||||
return i
|
||||
}
|
||||
|
||||
func prsrune(g rune) int {
|
||||
dif := '፩' - '1'
|
||||
if g == '፻' {
|
||||
return 100
|
||||
}
|
||||
if '፱' < g && g < '፻' {
|
||||
r := g - dif - 9
|
||||
i, _ := strconv.Atoi(string(r) + "0")
|
||||
return i
|
||||
}
|
||||
if '፨' <= g && g <= '፱' {
|
||||
r := g - dif
|
||||
i, _ := strconv.Atoi(string(r))
|
||||
return i
|
||||
}
|
||||
return 0
|
||||
}
|
||||
|
||||
// Fmtint return string representation of integer i
|
||||
func Fmtint(i int) string {
|
||||
var signed bool
|
||||
if i < 0 {
|
||||
i = -1 * i
|
||||
signed = true
|
||||
}
|
||||
str := strconv.Itoa(i)
|
||||
var zz []rune
|
||||
for idx, v := range str {
|
||||
b := (len(str) - 1) - idx
|
||||
q := b % 2
|
||||
if q != 0 {
|
||||
i, _ := strconv.Atoi(string(v))
|
||||
x := fmtrune(i * 10)
|
||||
zz = append(zz, x)
|
||||
} else {
|
||||
i, _ := strconv.Atoi(string(v))
|
||||
x := fmtrune(i)
|
||||
if idx != len(str)-1 {
|
||||
zz = append(zz, x, '፻')
|
||||
} else {
|
||||
zz = append(zz, x)
|
||||
}
|
||||
}
|
||||
}
|
||||
var ans []rune
|
||||
for _, v := range zz {
|
||||
if v != '፨' {
|
||||
ans = append(ans, v)
|
||||
}
|
||||
}
|
||||
if len(ans) >= 2 && ans[0] == '፩' && ans[1] == '፻' {
|
||||
ans = ans[1:]
|
||||
}
|
||||
var answer string
|
||||
switch signed {
|
||||
case true:
|
||||
answer = "-" + string(ans)
|
||||
case false:
|
||||
answer = string(ans)
|
||||
}
|
||||
return answer
|
||||
}
|
||||
|
||||
func fmtrune(i int) rune {
|
||||
dif := '፩' - '1'
|
||||
if i == 100 {
|
||||
return '፻'
|
||||
}
|
||||
if 10 <= i && i <= 90 {
|
||||
r := dif + '1' + rune(i)/10 + 8
|
||||
return r
|
||||
}
|
||||
if 0 < i && i <= 9 {
|
||||
r := dif + '1' + rune(i) - 1
|
||||
return r
|
||||
}
|
||||
return '፨'
|
||||
}
|
||||
|
||||
// Fmtfloat return string representation of float64 n
|
||||
func Fmtfloat(n float64) string {
|
||||
str := strconv.FormatFloat(n, 'f', -1, 64)
|
||||
if !strings.Contains(str, ".") {
|
||||
i, _ := strconv.Atoi(str)
|
||||
s := Fmtint(i)
|
||||
return s
|
||||
}
|
||||
strs := strings.Split(str, ".")
|
||||
i, _ := strconv.Atoi(strs[0])
|
||||
s0 := Fmtint(i)
|
||||
q := len(strs[1]) % 2
|
||||
j, _ := strconv.Atoi(strs[1])
|
||||
if q != 0 {
|
||||
j, _ = strconv.Atoi(strs[1] + "0")
|
||||
}
|
||||
s1 := Fmtint(j)
|
||||
return s0 + "." + s1
|
||||
}
|
|
@ -0,0 +1,128 @@
|
|||
package gn
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func TestPrsint(t *testing.T) {
|
||||
tests := []struct {
|
||||
in string
|
||||
want int
|
||||
}{
|
||||
{"", 0},
|
||||
{"+", 0},
|
||||
{"-", 0},
|
||||
{"-፲፱፻፴፩", -1931},
|
||||
{"+፴", 30},
|
||||
{"፲፱", 19},
|
||||
{"፱", 9},
|
||||
{"፻", 100},
|
||||
{"፲፻፱፻", 100900},
|
||||
}
|
||||
//fmt.Println("---Prsint testing---")
|
||||
for _, v := range tests {
|
||||
got := Prsint(v.in)
|
||||
if got != v.want {
|
||||
t.Errorf("want %v got %v", v.want, got)
|
||||
}
|
||||
//fmt.Printf("want %v got %v\n", v.want, got)
|
||||
}
|
||||
}
|
||||
func TestFmtint(t *testing.T) {
|
||||
tests := []struct {
|
||||
in int
|
||||
want string
|
||||
}{
|
||||
//{10000, "፼"},
|
||||
{100, "፻"},
|
||||
{90, "፺"},
|
||||
{10, "፲"},
|
||||
{9, "፱"},
|
||||
{1, "፩"},
|
||||
//{0, "፨"},
|
||||
{0, ""},
|
||||
{+19, "፲፱"},
|
||||
{-1931, "-፲፱፻፴፩"},
|
||||
{100900, "፲፻፱፻"},
|
||||
//{10000, "ሐ"},
|
||||
}
|
||||
//fmt.Println("---Fmtint testing---")
|
||||
for _, v := range tests {
|
||||
got := Fmtint(v.in)
|
||||
if got != v.want {
|
||||
t.Errorf("want %s got %s", v.want, got)
|
||||
}
|
||||
//fmt.Printf("want %s got %s\n", v.want, got)
|
||||
}
|
||||
}
|
||||
func TestFmtfloat(t *testing.T) {
|
||||
tests := []struct {
|
||||
in float64
|
||||
want string
|
||||
}{
|
||||
//{10000, "፼"},
|
||||
{100.11, "፻.፲፩"},
|
||||
{90.2, "፺.፳"},
|
||||
{10.345, "፲.፴፬፻፶"},
|
||||
{9.41, "፱.፵፩"},
|
||||
{1.0, "፩"},
|
||||
//{0, "፨"},
|
||||
{0.0, ""},
|
||||
{+19.0, "፲፱"},
|
||||
{-1931.0, "-፲፱፻፴፩"},
|
||||
{100900.0, "፲፻፱፻"},
|
||||
//{10000, "ሐ"},
|
||||
}
|
||||
//fmt.Println("---Fmtfloat testing---")
|
||||
for _, v := range tests {
|
||||
got := Fmtfloat(v.in)
|
||||
if got != v.want {
|
||||
t.Errorf("want %s got %s", v.want, got)
|
||||
}
|
||||
//fmt.Printf("want %s got %s\n", v.want, got)
|
||||
}
|
||||
|
||||
}
|
||||
func TestPrsfloat(t *testing.T) {
|
||||
tests := []struct {
|
||||
in string
|
||||
want float64
|
||||
}{
|
||||
{"", 0},
|
||||
{"+", 0},
|
||||
{"-", 0},
|
||||
{"-፲፱፻፴፩", -1931},
|
||||
{"+፴", 30},
|
||||
{"፲፱.፲", 19.1},
|
||||
{"፱.", 9},
|
||||
{"፻", 100},
|
||||
{"፻.፲፩", 100.11},
|
||||
{"፲፻፱፻", 100900},
|
||||
}
|
||||
//fmt.Println("---Prsfloat testing---")
|
||||
for _, v := range tests {
|
||||
got := Prsfloat(v.in)
|
||||
if got != v.want {
|
||||
t.Errorf("want %v got %v", v.want, got)
|
||||
}
|
||||
//fmt.Printf("want %v got %v\n", v.want, got)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func ExamplePrsint() {
|
||||
i := Prsint("፲፱፻፴፩")
|
||||
fmt.Println(i)
|
||||
//output: 1931
|
||||
}
|
||||
func ExampleFmtfloat() {
|
||||
i := Fmtfloat(9.41)
|
||||
fmt.Println(i)
|
||||
//output: ፱.፵፩
|
||||
}
|
||||
func ExamplePrsfloat() {
|
||||
i := Prsfloat("-፱፻፴.፵፩")
|
||||
fmt.Println(i)
|
||||
//output: -930.41
|
||||
}
|
Loading…
Reference in New Issue