将字符串“ 3px”转换为浮点数时,C可以处理它,但是go不能。可以使用一种方法将字符串的最长有效前缀转换为浮点数吗?
C:
#include <stdlib.h>
#include <stdio.h>
int main() {
printf("%f", atof("3px"));
// result: 3.0
return 0;
}
Run Code Online (Sandbox Code Playgroud)
走:
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
}
Run Code Online (Sandbox Code Playgroud)
小智 5
不,没有办法将字符串的最长有效前缀转换为浮点数。正在转换的值应该是有效的。来自Docs:如果s格式正确且在有效的浮点数附近,则ParseFloat返回最近的浮点数
https://golang.org/pkg/strconv/#ParseFloat
如果考虑C在做什么,它实际上是先在内部更改“ 3px”->“ 3”,然后再进行解析。在Go中,您必须在strconv可以将其无效之前显式删除无效字符。