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

10-08 12:59