【问题标题】:Convert feet and inches to centimeters in Go?在围棋中将英尺和英寸转换为厘米?
【发布时间】:2017-05-20 22:19:25
【问题描述】:

我是 Go 的新手,但在将人类身高从英尺/英寸转换为厘米时遇到了问题。

如何以有效的方式将类似于 5'2'' 的字符串转换为厘米 int?

编辑: 经过更多测试后,我最终得到了这个解决方案。如何改进?

height := strings.Split("5'2''", "'")
heightfeet,err :=strconv.ParseFloat(height[0],10)
heightinch,err :=strconv.ParseFloat(height[1],10)
heightcm :=heightfeet*30.48+heightinch*2.54

【问题讨论】:

  • @CeriseLimón 我用一个可行的解决方案更新了这个问题。不过,它可能需要一些改进。欢迎提出任何建议。
  • 我不熟悉 Go,但是根据它遵循的操作顺序,请记住 ((heightfeet*30.48) + (heightinch*2.54)) 与 (heightfeet*30.48) 不同+高度英寸* 2.54)。事实上,我相信你的代码会输出 392.XX cm,也就是大约 12 英尺。
  • @Astor139 输出实际上是 157,48 所以我认为它可以这样。乘法是在加法之前计算的?
  • @Kaah:一个测试用例:"2''" 或两英寸。
  • @peterSO 是的,那会毁了它。看起来它也会毁掉 AndreaM16。也许它超出了我的特定问题的范围,因为输入是人类身高。我会在问题中说明这一点。但我同意处理这种情况也是一种好习惯。

标签: go type-conversion


【解决方案1】:

我觉得你的方法很好,但是,如果你真的想确保只提取整数并使用常量,请查看我设置的 Go Playground。

package main

import (
    "fmt"
    "regexp"
    "strconv"
)

func main() {

    //Defining our constants     
    const cm1 = 30.48       
    const cm2 =  2.54 

    //Slice to contain parsed ints
    var parsedTokens []float64

    feet := "5'2''"

    //Regex to extract only integers
    reg := regexp.MustCompile("[0-9]+")
    filtered:= reg.FindAllString(feet, -1)

    //Parse each value v in filtered and append it into parsedTokens
    for _, v := range filtered {
        k, _ := strconv.ParseFloat(v, 64)
        parsedTokens = append(parsedTokens, k)
    }

    //157.48000000000002
    fmt.Println(parsedTokens[0]*cm1 + parsedTokens[1]*cm2)
}

【讨论】:

  • 感谢您展示另一种方法。我同意你的看法,如果输入格式有一天会改变,它可能会毁了我的脚本。
猜你喜欢
  • 2023-01-18
  • 1970-01-01
  • 1970-01-01
  • 2016-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 2020-03-21
相关资源
最近更新 更多