在Swift中使用正则表达式减少浮点数精度

3
我想要减少嵌入在字符串中的浮点数的精度。
举个例子,[93829.38,1415.45467897]。
我想截取浮点数,获得最大精度为2的浮点数(我可以直接截取字符串,不需要对数字进行四舍五入)。
例如,[93829.38,1415.45]。
通过rubular上的这个正则表达式 `(\d+\.\d)`,我们可以获取字符串中的浮点数。
但我不知道如何将这个正则表达式转换为Swift格式,并如何替换最短的浮点字符串...
1个回答

4
您可以使用:
let str = "The example is [93829.38, 1415.45467897, 1.2, 134.34]"
let pattern = "(\\d+\\.\\d{2})\\d+"
let result = str.replacingOccurrences(of: pattern, with: "$1", options: [.regularExpression])
print(result) // => The example is [93829.38, 1415.45, 1.2, 134.34]

一个像 (\d+\.\d{2})\d+ 这样的模式将匹配并捕获至少一个数字,一个点和两个数字,然后将匹配一个或多个数字。替换为 $1,即对存储在第一组中的值的反向引用,从而截断与最后一个 \d+ 匹配的数字。
请参见此处的正则表达式演示
如果有任何边缘情况,通常可以通过单词边界 (\b) 或环视来处理。

1
这个正则表达式 (\d+\.\d{,2})\d* 在精度小于2位时有更好的选择。 - Erwan
@Erwan (\d+\.\d{0,2})\d* 可以匹配 12., 12.1, 12.12,由于这些字符串不需要修改,因此根本不需要匹配它们。 - Wiktor Stribiżew

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接