【问题标题】:Is there an atof equivalent in go?go中有atof等价物吗?
【发布时间】:2019-08-31 02:40:43
【问题描述】:

当将字符串 "3px" 转换为浮点数时,C 可以处理它,但 go 不能。在go中,有没有办法将字符串的最长有效前缀转换为浮点数?

C:

#include <stdlib.h>
#include <stdio.h>

int main() { 
    printf("%f", atof("3px")); 
    // result: 3.0
    return 0;
}

去:

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
}

【问题讨论】:

  • 只去掉px 部分?是否需要处理任意非数字后缀?

标签: go


【解决方案1】:

您可以使用 fmt.Sscan 它只会提取字符串的可转换部分

package main
import (
    "fmt"
)

func main() {
    var s int
    fmt.Sscan("1px",&s)
    fmt.Println("Hello, playground",s)
}

【讨论】:

    【解决方案2】:

    不,没有办法将字符串的最长有效前缀转换为浮点数。被转换的值应该是有效的。 来自 Docs :如果 s 格式正确且接近有效浮点数,则 ParseFloat 返回最接近的浮点数

    https://golang.org/pkg/strconv/#ParseFloat

    如果你考虑C在做什么,它实际上是先在内部改变“3px”-->“3”,然后再解析。在 Go 中,您必须在 strconv 转换之前显式删除无效字符。

    【讨论】:

      猜你喜欢
      • 2016-07-03
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2010-10-20
      • 1970-01-01
      • 2011-03-18
      • 2019-06-23
      • 2015-07-06
      相关资源
      最近更新 更多