我最初尝试过这个,但%operator运算符没有为float64定义。
func main(){
var a float64
a = 1.23
if a%1 == 0{
fmt.Println("yay")
}else{
fmt.Println("you fail")
}
}
答案 0 :(得分:17)
假设您的数字适合int64
,您只需将浮点值与转换后的整数值进行比较,看看它们是否相同:
if a == float64(int64(a)) {
fmt.Println("yay")
} else {
fmt.Println("you fail")
}
否则,您可以使用math.Trunc
详细here功能,例如:
if a == math.Trunc(a) {
fmt.Println("yay")
} else {
fmt.Println("you fail")
}
那个应该在整个float64
域内工作。
答案 1 :(得分:3)
您可以使用math.Modf
功能:
const epsilon = 1e-9 // Margin of error
if _, frac := math.Modf(math.Abs(a)); frac < epsilon || frac > 1.0 - epsilon {
// ...
}
此处需要 epsilon
,因为浮点数学不精确(例如float64(.3)+float64(.6)+float64(.1) != 1
)
来自godoc:
func Modf(f float64) (int float64, frac float64)
Modf返回总和为f的整数和小数浮点数。两个值都与f具有相同的符号。
答案 2 :(得分:1)
math.Trunc怎么样?它会将float64
截断为整数组件。
例如:
if a.Trunc() == a {
// ...
}
请注意有关浮点表示限制的常见注意事项。您可能希望检查a.Trunc()
是否在a
的某个小范围内,以便考虑1.00000000000000002
等值。
答案 3 :(得分:0)
我这样解决了它:
isWhole := int(value * 100) == int(value) * 100
调整系数中的位数,例如乘以10000以检查4位数字。
答案 4 :(得分:-1)
我认为以下代码可能有用,
func main(){
var (
a float64
b float64
c float64
)
a = 1.23
b = float64(int64(a))
c = a - b
if c > 0 {
fmt.Println("Not a Whole Number")
} else {
fmt.Println("Whole Number")
}
}