当前位置: 首页 > 面试题库 >

根据go中的语言环境将货币/浮点数字符串解析为浮点类型

谷泳
2023-03-14
问题内容

我不知道如何在了解i18n语言环境的基础上,如何对“ float-string”解析为浮点数,而不是对该字符串做任何假设。

例如:德国人像我一样,写“ 1.234,87”,而美国人写“
1,234.87”。在我的项目中,我确实知道我希望使用哪种语言环境,但是我不想“硬编码”关于该本地语言如何编写这些内容的假设。

我不喜欢做regexp / stringreplacements。

有没有一种通用的方式来表达类似

myFloat := ParseFloatByLocale("1.234,76", "DE-DE")
// myFloat => 1234.76

strconv似乎没有此功能,也没有 x/text/language

感谢任何提示!


问题答案:

最好的选择是使用标准库的strconv。您可以制作自己的包装器和语言环境的东西。最终,我将添加更多错误检查并将其转换为它自己的程序包,但这是一个主意。如果尚未找到软件包,则很有可能必须编写自己的软件包。对于更通用的解决方案,您必须考虑所有可能的输入..在每个语言环境中对其进行规范化,并在其他人使用您的工具时强制执行这些规则…考虑到if语句和段数,这将是一个更复杂的解决方案逻辑部分。好处是您知道strconv.ParseFloat期望的输入类型。因此,您真正要做的就是获取用户输入并将其转换为编程标准http://floating-
point-gui.de/formats / fp /
。给定的数字通常是通用的,除了逗号和小数点外,应该没有太多用例。您甚至可以进一步概括一下,并说有两种主要格式。.https
://www.quora.com/Why-do-some-countries-use-a-period-and-others-use-a-逗号-
separate-large-numbers,主要分为欧洲等国家和英国/美国,德国几乎在整个欧洲都使用该标准。在这种假设下,由于用例降至2,因此实际上没有什么可做的。

package main

import (
    "fmt"
    "log"
    "strconv"
    "strings"
)

func normalizeGerman(old string) string {
    s := strings.Replace(old, ",", ".", -1)
    return strings.Replace(s, ".", "", 1)
}
func normalizeAmerican(old string) string {
    return strings.Replace(old, ",", "", -1)
}

var locale map[string]func(string) string

func init() {
    locale = make(map[string]func(string) string)
    locale["DE-DE"] = normalizeGerman
    locale["US"] = normalizeAmerican
}

func main() {
    var f, f2 float64
    var err error
    // german
    if val, ok := locale["DE-DE"]; ok {
        f, err = strconv.ParseFloat(val("1.234,87"), 64)
        if err != nil {
            log.Fatal("german fail", err)
        }
    }
    //american
    if val, ok := locale["US"]; ok {
        f2, err = strconv.ParseFloat(val("1,234.87"), 64)
        if err != nil {
            log.Fatal("american fail", err)
        }
    }

    fmt.Println(f, f2)

}


 类似资料:
  • Go语言提供了两种精度的浮点数 float32 和 float64,它们的算术规范由 IEEE754 浮点数国际标准定义,该浮点数规范被所有现代的 CPU 支持。 这些浮点数类型的取值范围可以从很微小到很巨大。浮点数取值范围的极限值可以在 math 包中找到: 常量 math.MaxFloat32 表示 float32 能取到的最大数值,大约是 3.4e38; 常量 math.MaxFloat64

  • 问题内容: 正如标题所说。我不认为有可能这样做,但如果可以告诉我。 这是我正在编写的bukkit(minecraft服务器)插件所必需的。我要执行一个命令:tnt [power]。电源是我想转换为浮点数的返回字符串。 谢谢 问题答案: 用于进行转换。 和之间的区别只是回报。如果需要(对象),请使用前者;如果要数字,请使用后者。

  • 问题内容: http://golang.org/pkg/strconv/ http://play.golang.org/p/4VNRgW8WoB 如何将浮点数转换为字符串格式?这是google游乐场,但未获得预期的输出。(2e + 07)我想得到“ 21312421.213123” 请帮助我从浮点数中获取字符串。谢谢 问题答案: 试试这个 如果只想获得尽可能高的位数精度,则特殊精度-1使用所需的最

  • 问题内容: 我正在处理一种加密货币RPC并接收json数据,如下所示: 使用Jsoncpp库或json11会将数字解析为。发生这种情况时,由于双重精度问题,结果为:。总的来说,这对金融交易来说是灾难性的,是不可接受的。 我已经有一个定点库,可以使用有效的字符串并将其在内部视为整数。有没有一种方法可以使Jsoncpp(或其他任何json库)将选定的数字json值用作字符串,以便可以使用固定精度正确地

  • 问题内容: 我正在尝试使用Go来找到“最佳”的方式来将浮点数格式化为字符串。我一直在寻找示例,但是找不到任何可以具体回答我所遇到问题的东西。我要做的就是使用“最佳”方法将浮点数格式化为字符串。小数位数可能会有所不同,但会知道(例如2或4或零)。下面是我要实现的示例。 根据以下示例,我应该使用还是或其他方式? 而且,每种的正常用法是什么? 我也不理解在以下当前使用32的情况下使用32或64的重要性:

  • rank ▲ ✰ vote url 33 526 73 660 url 把字符串解析成浮点数或者整数 在Python里,怎么样把一个数字型字符串像"545.2222"解析成对应的浮点值545.2222?或者把一个"31"解析成31? 我只是想知道怎么样才能解析一个浮点型字符串编程浮点数,或者整型字符串转换成整型? >>> a = "545.2222" >>> float(a) 545.222200