我有一个float64我转换成一个字符串: 30.060671
我正试图修剪/删除/扼杀一切 30
我试过的一些事情:
fmt.Println(strings.TrimRight("30.060671", ".([0-9])"))
fmt.Println(strings.TrimRight("30.060671", "."))
fmt.Println(strings.TrimSuffix("30.060671", "."))
Run Code Online (Sandbox Code Playgroud)
Iam*_*NaN 15
一种方法是使用strings.Split期间:
parts := strings.Split("30.060671", ".")
fmt.Println(parts[0])
Run Code Online (Sandbox Code Playgroud)
另一种选择是首先转换为int,然后转换为字符串:
a := 30.060671
b := int(a)
fmt.Println(b)
Run Code Online (Sandbox Code Playgroud)
以下是如何获取分隔符的任一侧。
Go.18使用后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
Run Code Online (Sandbox Code Playgroud)
https://go.dev/play/p/tS4RpBKlxiV
Go1.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
Run Code Online (Sandbox Code Playgroud)
https://play.golang.org/p/HBi4G5tBL9
按照@p ??????? 在注释中建议,在转换为string之前,应该先对浮点数进行四舍五入。
无论如何,这是我尝试使用strings.Index从中修剪其余部分.:
func trimStringFromDot(s string) string {
if idx := strings.Index(s, "."); idx != -1 {
return s[:idx]
}
return s
}
Run Code Online (Sandbox Code Playgroud)
另外,要回答为什么TrimRight和TrimSuffix无法按预期方式工作是因为.它不是尾随字符串/ unicode:
TrimRight返回字符串s的一部分,其中删除了cutset中包含的所有尾随Unicode代码点。
TrimSuffix返回s,但不提供结尾的后缀字符串。如果s不以后缀结尾,则s不变返回。
| 归档时间: |
|
| 查看次数: |
13478 次 |
| 最近记录: |