本地化相关的字符串转换成数字

我想要将本地化的字符串转换成数字,包括小数点和千分位分隔符。对于只有“.”作为小数点的字符串,它可以正常工作,但以下情况会返回 nil

  1. "21,1" (期望:21.1)
  2. "1,231.0" (期望:1231.0)
  3. "1.000.101,044" (期望:1000101.044)

问题在于我不知道之前设置的本地化是什么,因此转换必须是通用的。

是否有本地化相关的字符串转换成数字的方法?

原文链接 https://stackoverflow.com/questions/70498803

点赞
stackoverflow用户1424244
stackoverflow用户1424244

有点像——没有特定的转换函数可以接受语言环境,但是可以使用 os.setlocale 来设置整个进程的语言环境:

assert(os.setlocale("de.utf8"))
print(tonumber("1,2"))

这会将 C 语言环境设置为德语(UTF-8),假设系统中已安装它,这将影响所有转换,以及格式化、排序、时间等方面。您必须使用 os.setlocale(name, "numeric") 来仅影响数字格式化和解析规则。

您可以多次尝试这样做,直到转换成功为止。

2021-12-27 19:34:58