- 增加输出float64带小数点(自适应)
continuous-integration/drone/push Build is passing Details
continuous-integration/drone/tag Build is passing Details

master v1.0.7
李光春 2 years ago
parent e3724e56fe
commit 56bdfc6a73

3
.gitignore vendored

@ -5,4 +5,5 @@
.vscode
*.log
gomod.sh
/vendor/
/vendor/
*_test.go

@ -1,7 +1,9 @@
package godecimal
import (
"fmt"
"math/big"
"strings"
)
// String 输出 string
@ -23,9 +25,34 @@ func (d Decimal) MoneyFloat64() float64 {
return f
}
// Float64Point 输出 float64带小数点
// Float64Point 输出float64带小数点
func (d Decimal) Float64Point(p int) float64 {
rat, _ := new(big.Rat).SetString(d.floatValue.Text('f', p))
f, _ := rat.Float64()
return f
}
// Float64PointAdaptive 输出float64带小数点(自适应)
func (d Decimal) Float64PointAdaptive(maxP int) float64 {
f, _ := d.floatValue.Float64()
if maxP > 0 {
pointLength := d.pointLength(f)
if pointLength > maxP {
rat, _ := new(big.Rat).SetString(d.floatValue.Text('f', maxP))
f2, _ := rat.Float64()
return f2
} else {
return f
}
} else {
return f
}
}
func (Decimal) pointLength(a any) int {
tmp := strings.Split(fmt.Sprint(a), ".")
if len(tmp) <= 1 {
return 0
}
return len(tmp[1])
}

@ -1,66 +0,0 @@
package godecimal
import (
"math/big"
"reflect"
"testing"
)
func TestNew(t *testing.T) {
priceString := NewString("100")
t.Log("从字符串创建:", priceString)
priceFloat := NewFloat(0.20)
t.Log("从浮点数创建:", priceFloat)
priceInt := NewInt(300)
t.Log("从整数创建:", priceInt)
priceUint := NewUint(400)
t.Log("从无符合整数创建:", priceUint)
t.Log("加:", priceString.Add(priceFloat), reflect.TypeOf(priceString))
t.Log("减", priceString.Sub(priceFloat), reflect.TypeOf(priceString))
t.Log("乘:", priceString.Mul(priceFloat), reflect.TypeOf(priceString))
t.Log("除:", priceString.Quo(priceFloat), reflect.TypeOf(priceString))
}
// https://www.itranslater.com/qa/details/2582643503239005184
// https://stackoverflow.com/questions/18390266/how-can-we-truncate-float64-type-to-a-particular-precision
func TestOperation(t *testing.T) {
a1 := NewFloat(0.1890)
t.Log("a1", a1)
a2 := NewFloat(0.50)
t.Log("a2", a2)
t.Log("a1+a2", a1.Add(a2), a1.Add(a2).String(), a1.Add(a2).Float64(), reflect.TypeOf(a1.Add(a2).Float64()), a1.Add(a2).MoneyFloat64(), reflect.TypeOf(a1.Add(a2).MoneyFloat64()))
t.Log("a1-a2", a1.Sub(a2), a1.Sub(a2).String(), a1.Sub(a2).Float64(), reflect.TypeOf(a1.Sub(a2).Float64()), a1.Sub(a2).MoneyFloat64(), reflect.TypeOf(a1.Sub(a2).MoneyFloat64()))
t.Log("a1*a2", a1.Mul(a2), a1.Mul(a2).String(), a1.Mul(a2).Float64(), reflect.TypeOf(a1.Mul(a2).Float64()), a1.Mul(a2).MoneyFloat64(), reflect.TypeOf(a1.Mul(a2).MoneyFloat64()))
t.Log("a1/a2", a1.Quo(a2), a1.Quo(a2).String(), a1.Quo(a2).Float64(), reflect.TypeOf(a1.Quo(a2).Float64()), a1.Quo(a2).MoneyFloat64(), reflect.TypeOf(a1.Quo(a2).MoneyFloat64()))
a3 := NewFloat(.035)
t.Log("a3", a3)
a4 := NewFloat(.08875)
t.Log("a4", a4)
t.Log("a3+a4", a3.Add(a4), a3.Add(a4).String(), a3.Add(a4).Float64(), reflect.TypeOf(a3.Add(a4).Float64()), a3.Add(a4).MoneyFloat64(), reflect.TypeOf(a3.Add(a4).MoneyFloat64()))
t.Log("a3-a4", a3.Sub(a4), a3.Sub(a4).String(), a3.Sub(a4).Float64(), reflect.TypeOf(a3.Sub(a4).Float64()), a3.Sub(a4).MoneyFloat64(), reflect.TypeOf(a3.Sub(a4).MoneyFloat64()))
t.Log("a3*a4", a3.Mul(a4), a3.Mul(a4).String(), a3.Mul(a4).Float64(), reflect.TypeOf(a3.Mul(a4).Float64()), a3.Mul(a4).MoneyFloat64(), reflect.TypeOf(a3.Mul(a4).MoneyFloat64()))
t.Log("a3/a4", a3.Quo(a4), a3.Quo(a4).String(), a3.Quo(a4).Float64(), reflect.TypeOf(a3.Quo(a4).Float64()), a3.Quo(a4).MoneyFloat64(), reflect.TypeOf(a3.Quo(a4).MoneyFloat64()))
}
func Test3(t *testing.T) {
var x1, y1 float64 = 10, 3
z1 := x1 / y1
t.Log(x1, y1, z1)
x2, y2 := big.NewFloat(10), big.NewFloat(3)
z2 := new(big.Float).Quo(x2, y2)
t.Log(x2, y2, z2)
}

@ -1,13 +0,0 @@
package godecimal
import (
"reflect"
"testing"
)
func TestCalculation(t *testing.T) {
t.Log("加:", Float64Add(10, 3), reflect.TypeOf(Float64Add(10, 3)))
t.Log("减", Float64Sub(10, 3), reflect.TypeOf(Float64Sub(10, 3)))
t.Log("乘:", Float64Mul(10, 3), reflect.TypeOf(Float64Mul(10, 3)))
t.Log("除:", Float64Quo(10, 3), reflect.TypeOf(Float64Quo(10, 3)))
}

@ -1,26 +0,0 @@
package godecimal
import "testing"
func TestMath(t *testing.T) {
t.Log(Abs(111))
t.Log(Abs(-111))
t.Log(Floor(3.4))
t.Log(Floor(3.5))
t.Log(Ceil(3.4))
t.Log(Ceil(3.5))
t.Log(Round(3.4))
t.Log(Round(3.5))
t.Log(RoundPoint(3.4))
t.Log(RoundPoint(3.5))
t.Log(RoundPoint(3.14))
t.Log(RoundPoint(3.14159))
t.Log(Max(4, 3))
t.Log(Min(4, 3))
}

@ -1,3 +1,3 @@
package godecimal
const Version = "1.0.6"
const Version = "1.0.7"

@ -1,7 +0,0 @@
package godecimal
import "testing"
func TestVersion(t *testing.T) {
t.Log(Version)
}
Loading…
Cancel
Save