go中是否有一个atof等效项?

Ste*_*nov 0 go

将字符串“ 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可以将其无效之前显式删除无效字符。