Fixed special convertion case from decimal 'x.y()' to fraction
This commit is contained in:
parent
c9db4b84e3
commit
aa1338cd51
@ -29,7 +29,7 @@ func float64ToFraction(f float64) (fract *fraction, err error) {
|
|||||||
var sign string
|
var sign string
|
||||||
intPart, decPart := math.Modf(f)
|
intPart, decPart := math.Modf(f)
|
||||||
if decPart < 0.0 {
|
if decPart < 0.0 {
|
||||||
sign="-"
|
sign = "-"
|
||||||
intPart = -intPart
|
intPart = -intPart
|
||||||
decPart = -decPart
|
decPart = -decPart
|
||||||
}
|
}
|
||||||
@ -89,11 +89,14 @@ func makeGeneratingFraction(s string) (f *fraction, err error) {
|
|||||||
goto exit
|
goto exit
|
||||||
}
|
}
|
||||||
if s[0] == '-' {
|
if s[0] == '-' {
|
||||||
sign=int64(-1)
|
sign = int64(-1)
|
||||||
s = s[1:]
|
s = s[1:]
|
||||||
} else if s[0] == '+' {
|
} else if s[0] == '+' {
|
||||||
s = s[1:]
|
s = s[1:]
|
||||||
}
|
}
|
||||||
|
if strings.HasSuffix(s, "()") {
|
||||||
|
s = s[0 : len(s)-2]
|
||||||
|
}
|
||||||
parts = strings.SplitN(s, ".", 2)
|
parts = strings.SplitN(s, ".", 2)
|
||||||
if num, err = strconv.ParseInt(parts[0], 10, 64); err != nil {
|
if num, err = strconv.ParseInt(parts[0], 10, 64); err != nil {
|
||||||
return
|
return
|
||||||
@ -106,7 +109,7 @@ func makeGeneratingFraction(s string) (f *fraction, err error) {
|
|||||||
den = 1
|
den = 1
|
||||||
dec := parts[1]
|
dec := parts[1]
|
||||||
lsd := len(dec)
|
lsd := len(dec)
|
||||||
for i:=lsd-1; i>= 0 && dec[i]=='0'; i-- {
|
for i := lsd - 1; i >= 0 && dec[i] == '0'; i-- {
|
||||||
lsd--
|
lsd--
|
||||||
}
|
}
|
||||||
for _, c := range dec[0:lsd] {
|
for _, c := range dec[0:lsd] {
|
||||||
|
@ -158,6 +158,7 @@ func TestGeneralParser(t *testing.T) {
|
|||||||
/* 137 */ {`builtin "os.file"`, int64(1), nil},
|
/* 137 */ {`builtin "os.file"`, int64(1), nil},
|
||||||
/* 138 */ {`v=10; v++; v`, int64(11), nil},
|
/* 138 */ {`v=10; v++; v`, int64(11), nil},
|
||||||
/* 139 */ {`1+1|2+0.5`, float64(2), nil},
|
/* 139 */ {`1+1|2+0.5`, float64(2), nil},
|
||||||
|
/* 140 */ {`1.2()`, newFraction(6, 5), nil},
|
||||||
}
|
}
|
||||||
|
|
||||||
// t.Setenv("EXPR_PATH", ".")
|
// t.Setenv("EXPR_PATH", ".")
|
||||||
|
Loading…
Reference in New Issue
Block a user