在Go语言中,unicode.IsNumber()函数的输入稍有变化就会得到不同的输出



为什么unicode.IsNumber(rune(truncfloat))在某些情况下返回false ?

对于55.3输出为真对于58.3,输出为false

下面是我的代码:
package main
import (
"fmt"
"unicode"
)
func main() {
var truncint int
var truncfloat float64
fmt.Printf("Enter a floating point number: ")
num, err := fmt.Scan(&truncfloat)
if unicode.IsNumber(rune(truncfloat)) {
truncint = int(truncfloat)
fmt.Printf("Trucated number is: %d", truncint)
} else {
fmt.Printf("Recieved %d numbers, Error: %s", num, err)
}
}

以下是带有执行输出的测试用例:

PS C:learngo> .trunc.exe
Enter a floating point number: 58.3
Recieved 1 numbers, Error: %!s(<nil>)
PS C:learngo> .trunc.exe
Enter a floating point number: 55.3
Trucated number is: 55

函数unicode.IsNumber()需要符文,例如'0''9'。虽然您确实传递了符文,但包含的值只是代码点55和58所映射的值。您可以通过添加

来查找。
fmt.Println(string(rune(truncfloat)))

这将为55打印7,为58打印::不是数字,所以检查失败。

你真正想做的是转换为int而不是rune(因为你关心的是结果的整数值,而不是它的Unicode码点),并在转换之前做你的数字检查(因为int不能保存不是数字(NaN)的值)。

if math.IsNaN(truncfloat) {
fmt.Println("Entered float is not a number")
return
}
if truncfloat > math.MaxInt || truncfloat < math.MinInt {
fmt.Println("Entered float is outside of int range")
return
}
truncint = int(truncfloat)
fmt.Printf("Truncated number is: %d", truncint)

相关内容

  • 没有找到相关文章

最新更新