我有一个float 64转换成字符串:30.060671我正在尝试修剪/删除/chomp 30之后的所有内容我试过的一些方法:
30.060671
30
fmt.Println(strings.TrimRight("30.060671", ".([0-9])")) fmt.Println(strings.TrimRight("30.060671", ".")) fmt.Println(strings.TrimSuffix("30.060671", "."))
vnzz0bqm1#
一种方法是使用字符串。在句点上拆分:
parts := strings.Split("30.060671", ".") fmt.Println(parts[0])
另一种选择是先转换为int,然后再转换为字符串:
a := 30.060671 b := int(a) fmt.Println(b)
8wtpewkr2#
根据@pайтфолд在评论中的建议,在转换为string之前,您应该将float四舍五入。无论如何,下面是我使用strings.Index从.中删除剩余部分的尝试:
.
func trimStringFromDot(s string) string { if idx := strings.Index(s, "."); idx != -1 { return s[:idx] } return s }
Playground另外,要回答为什么TrimRight和TrimSuffix不能按预期工作,是因为.不是尾随字符串/unicode:TrimRight返回字符串s的一个切片,其中删除了cutset中包含的所有尾随Unicode代码点。TrimSuffix返回不带提供的尾随后缀字符串的% s。如果s不以后缀结尾,则不作任何修改地返回s。
icnyk63a3#
下面是如何获得分隔符的任何一方。在Go.18之后使用strings.Cut
strings.Cut
string := "Symver.0.1.0" delimiter := "." leftOfDelimiter, rightOfDelimiter, found := strings.Cut(string, delimiter) fmt.Println("Left of Delimiter: ", leftOfDelimiter) fmt.Println("Right of Delimiter: ", rightOfDelimiter) fmt.Println("Found: ", found) //Left of Delimiter: Symver //Right of Delimiter: 0.1.0 //Found: true
https://go.dev/play/p/tS4RpBKlxiV出发前1.18
string := "Symver.0.1.0" delimiter := "." leftOfDelimiter := strings.Split(string, delimiter)[0] rightOfDelimiter := strings.Join(strings.Split(string, delimiter)[1:], delimiter) fmt.Println("Left of Delimiter: ", leftOfDelimiter) fmt.Println("Right of Delimiter: ", rightOfDelimiter) //Left of Delimiter: Symver //Right of Delimiter: 0.1.0
https://play.golang.org/p/HBi4G5tBL9
gdx19jrr4#
before,after,found := strings.Cut("123.456", ".")
你可以只使用before,忽略其余部分:
before,_,_ := strings.Cut("123.456", ".")
svgewumm5#
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)
你可以选择分隔符。我不知道这算不算优雅,但是嘿。
5条答案
按热度按时间vnzz0bqm1#
一种方法是使用字符串。在句点上拆分:
另一种选择是先转换为int,然后再转换为字符串:
8wtpewkr2#
根据@pайтфолд在评论中的建议,在转换为string之前,您应该将float四舍五入。
无论如何,下面是我使用strings.Index从
.
中删除剩余部分的尝试:Playground
另外,要回答为什么TrimRight和TrimSuffix不能按预期工作,是因为
.
不是尾随字符串/unicode:TrimRight返回字符串s的一个切片,其中删除了cutset中包含的所有尾随Unicode代码点。
TrimSuffix返回不带提供的尾随后缀字符串的% s。如果s不以后缀结尾,则不作任何修改地返回s。
icnyk63a3#
下面是如何获得分隔符的任何一方。
在Go.18之后使用
strings.Cut
https://go.dev/play/p/tS4RpBKlxiV
出发前1.18
https://play.golang.org/p/HBi4G5tBL9
gdx19jrr4#
Go为此提供了一个函数:strings.Cut
你可以只使用before,忽略其余部分:
svgewumm5#
这应该很容易。(顺便说一句:只是补充一下,其中一位评论者最初陈述或暗示了类似的解决方案)。但是你必须只使用字符串,这应该做-
你可以选择分隔符。我不知道这算不算优雅,但是嘿。