将字符串“3px”转换为浮点数时,C可以处理它,但是go不能。在使用中,是否有一种方法可以将字符串的最长有效前缀转换为浮点数?
C:
#include <stdlib.h>
#include <stdio.h>
int main() {
printf("%f", atof("3px"));
// result: 3.0
return 0;
}
Go:
package main
import "fmt"
import "strconv"
func main() {
value, err := strconv.ParseFloat("3px", 64)
fmt.Printf("%f, %v\n", value, err)
// strconv.ParseFloat: parsing "3px": invalid syntax
}
最佳答案
不,无法将字符串的最长有效前缀转换为浮点数。转换后的值应该有效。
来自Docs:如果s格式正确且在有效的浮点数附近,则ParseFloat返回最近的浮点数
https://golang.org/pkg/strconv/#ParseFloat
如果考虑C在做什么,它实际上是先在内部更改“3px”->“3”,然后再进行解析。在Go中,您必须在strconv可以将其无效之前显式删除无效字符。