我有一个我转换成字符串的float64:30.060671
我试图在30
我尝试过的一些事情:
fmt.Println(strings.TrimRight("30.060671", ".([0-9])"))
fmt.Println(strings.TrimRight("30.060671", "."))
fmt.Println(strings.TrimSuffix("30.060671", "."))
答案 0 :(得分:10)
这样做的一种方法是在句号中使用strings.Split:
parts := strings.Split("30.060671", ".")
fmt.Println(parts[0])
另一种选择是首先转换为int,然后转换为字符串:
a := 30.060671
b := int(a)
fmt.Println(b)
答案 1 :(得分:2)
根据评论中建议的@pайтфолд,您应该在转换为字符串之前对 float 进行舍入。
无论如何,我尝试使用 strings.Index 来修剪.
的剩余部分:
func trimStringFromDot(s string) string {
if idx := strings.Index(s, "."); idx != -1 {
return s[:idx]
}
return s
}
另外,要回答为什么 TrimRight 和 TrimSuffix 无法按预期工作,因为.
不是尾随字符串/ unicode:
TrimRight返回字符串s的一个片段,其中包含所有尾随的Unicode 删除了cutset中包含的代码点。
TrimSuffix返回s而没有提供的尾随后缀字符串。如果是 不以后缀结尾,s不变。
答案 2 :(得分:0)
fmt.Println(fmt.Sprintf("%.0f", 30.060671))
这应该很容易。 (顺便说一句:只是补充一下,其中一位评论者最初陈述或提到过类似的解决方案)。 但是你必须只使用字符串,这应该做 -
fmt.Println(fmt.Sprintf("%.0f", 30.060671))
value := "30.060671"
f := func(c rune) bool {
return c == ',' || c == ':' || c == '.'
}
fields := strings.FieldsFunc(value, f)[0]
fmt.Printf("%v", fields)
你可以选择分隔符。我不知道这是否优雅但是嘿。
答案 3 :(得分:-1)