2017-10-15 22 views
2

出于某种原因,当我测试平等,即使mod的结果实际上是正确的时,我得到大int错误的结果! 例如,我想2015年计算2%,导致1大int给我错误的结果在平等

当我用大整型,我得到错误当我这样做:

fmt.Println((test.Mod(big.NewInt(2015),big.NewInt(2)))==big.NewInt(1)) 

然而,当我使用常规INT,我得到真正的(这是正确的事情反正):

fmt.Println(2015%2==1) 

我应该做不同的平等使用大INT什么时候?

回答

1

Package big

import "math/big" 

func NewInt

func NewInt(x int64) *Int 

NewInt分配并返回一个新的诠释设置为x。

func (*Int) Cmp

func (x *Int) Cmp(y *Int) (r int) 

CMP比较x和y,并返回:

-1 if x < y 
0 if x == y 
+1 if x > y 

变量ab是指针:*big.Int。使用Cmp方法比较值。例如,

package main 

import (
    "fmt" 
    "math/big" 
) 

func main() { 
    a := big.NewInt(42) 
    fmt.Printf("a: %[1]T %[1]p %[1]v\n", a) 
    b := big.NewInt(42) 
    fmt.Printf("b: %[1]T %[1]p %[1]v\n", b) 
    fmt.Println("pointers:", a == b)  // compare pointers 
    fmt.Println("values: ", a.Cmp(b) == 0) // compare values 

    fmt.Println() 
    test := new(big.Int) 
    fmt.Println((test.Mod(big.NewInt(2015), big.NewInt(2))).Cmp(big.NewInt(1)) == 0) 
} 

游乐场:https://play.golang.org/p/TH6UzceZ4y

输出:

a: *big.Int 0x1040a0c0 42 
b: *big.Int 0x1040a0d0 42 
pointers: false 
values: true 

true 
0

看看(* int)Cmp函数。

package main 

import (
    "fmt" 
    "math/big" 
) 

func main() { 
    a := big.NewInt(5) 
    b := big.NewInt(5) 
    fmt.Println(a == b) 
    fmt.Println(a.Cmp(b)) 
}