在golang中分隔符后修剪所有内容

时间:2015-04-11 17:57:03

标签: go

我有一个我转换成字符串的float64:30.060671

我试图在30

之后修剪/删除/删除所有内容

我尝试过的一些事情:

fmt.Println(strings.TrimRight("30.060671", ".([0-9])"))
fmt.Println(strings.TrimRight("30.060671", "."))
fmt.Println(strings.TrimSuffix("30.060671", "."))

4 个答案:

答案 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
}

Playground

另外,要回答为什么 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)

以下是如何获取分隔符的任何一方。

{{1}}

https://play.golang.org/p/HBi4G5tBL9