66 lines
1.2 KiB
Go
66 lines
1.2 KiB
Go
package attribute
|
|
|
|
import (
|
|
"fmt"
|
|
"math"
|
|
)
|
|
|
|
//基准倍数
|
|
const CARDINAL_NUMBER int = 10000
|
|
|
|
func NewFixedPoint(value float32) FixedPoint {
|
|
return FixedPoint(math.Round(float64(value * float32(CARDINAL_NUMBER))))
|
|
}
|
|
|
|
type FixedPoint int
|
|
|
|
func (this FixedPoint) SetInt(v int) {
|
|
this = FixedPoint(v)
|
|
}
|
|
|
|
func (this FixedPoint) Scalar() float32 {
|
|
return float32(this) * 0.0001
|
|
}
|
|
|
|
func (this FixedPoint) ToInt() int {
|
|
return int(this) / CARDINAL_NUMBER
|
|
}
|
|
func (this FixedPoint) ToFloat() float32 {
|
|
return this.Scalar()
|
|
}
|
|
func (this FixedPoint) ToString() string {
|
|
return fmt.Sprintf("%f", this.Scalar())
|
|
}
|
|
|
|
/// -
|
|
func (this FixedPoint) Add(v float32) {
|
|
y := NewFixedPoint(v)
|
|
this = FixedPoint(int(this) + int(y))
|
|
}
|
|
|
|
/// -
|
|
func (this FixedPoint) Reduce(v float32) {
|
|
y := NewFixedPoint(v)
|
|
this = FixedPoint(int(this) - int(y))
|
|
}
|
|
|
|
/// +
|
|
func FixedPoint_Add(x, y FixedPoint) FixedPoint {
|
|
return FixedPoint(x + y)
|
|
}
|
|
|
|
/// -
|
|
func FixedPoint_Reduce(x, y FixedPoint) FixedPoint {
|
|
return FixedPoint(x - y)
|
|
}
|
|
|
|
/// *
|
|
func FixedPoint_Multiply(x, y FixedPoint) FixedPoint {
|
|
return FixedPoint((int(x) * int(y)) / CARDINAL_NUMBER)
|
|
}
|
|
|
|
/// /
|
|
func FixedPoint_Divide(x, y FixedPoint) FixedPoint {
|
|
return FixedPoint((int(x) * CARDINAL_NUMBER) / int(y))
|
|
}
|