使用golang中的位进行逗号运算后四舍五入为两个数字

时间:2019-06-17 09:31:42

标签: go

代码与位配合使用-非常快速地舍入。 我想用逗号将两个数字四舍五入。 Сode:enter link description here


Data:                
  62.83444444444446
  -62.83444444444446
have result:  
  63   
  -63
want:
  62.84
  -62.84

func Round(x float64) float64 {
const (
    mask     = 0x7FF
    shift    = 64 - 11 - 1
    bias     = 1023

    signMask = 1 << 63
    fracMask = (1 << shift) - 1
    halfMask = 1 << (shift - 1)
    one      = bias << shift
)

bits := math.Float64bits(x)
e := uint(bits>>shift) & mask

switch {
case e < bias:
    // Round abs(x)<1 including denormals.
    bits &= signMask       // +-0 
    if e == bias-1 {
        bits |= one        // +-1
    }
case e < bias+shift:
    // Round any abs(x)>=1 containing a fractional component [0,1).
    e -= bias
    bits += halfMask >> e
    bits &^= fracMask >> e
}
return math.Float64frombits(bits)
}

func main() {

x := 62.83444444444446
y := -62.83444444444446
fmt.Println(Round(x))
fmt.Println(Round(y))
}

相似之处没有任何位:enter link description here 请帮助正确制作。

0 个答案:

没有答案