package attribute import ( "fmt" "math" ) //εŸΊε‡†ε€ζ•° const CARDINAL_NUMBER int = 10000 func NewFixedPoint(value float32) FixedPoint { return FixedPoint{ rawValue: int(math.Round(float64(value * float32(CARDINAL_NUMBER)))), } } type FixedPoint struct { rawValue int } func (this FixedPoint) SetInt(v int) { this.rawValue = v } func (this FixedPoint) Scalar() float32 { return float32(this.rawValue) * 0.0001 } func (this FixedPoint) ToInt() int { return this.rawValue / 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.rawValue = this.rawValue + y.rawValue } /// - func (this FixedPoint) Reduce(v float32) { y := NewFixedPoint(v) this.rawValue = this.rawValue - y.rawValue } /// + func FixedPoint_Add(x, y FixedPoint) FixedPoint { result := FixedPoint{} result.rawValue = x.rawValue + y.rawValue return result } /// - func FixedPoint_Reduce(x, y FixedPoint) FixedPoint { result := FixedPoint{} result.rawValue = x.rawValue - y.rawValue return result } /// * func FixedPoint_Multiply(x, y FixedPoint) FixedPoint { result := FixedPoint{} result.rawValue = (x.rawValue * y.rawValue) / CARDINAL_NUMBER return result } /// / func FixedPoint_Divide(x, y FixedPoint) FixedPoint { result := FixedPoint{} result.rawValue = (x.rawValue * CARDINAL_NUMBER) / (y.rawValue) return result }