go_dreamfactory/modules/battle/fight/attribute/fixedpoint.go
2022-09-21 14:44:44 +08:00

78 lines
1.5 KiB
Go

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
}