Perl 从 strings/floating 点数字中删除截断零
Perl remove truncating zeros from strings/floating point numbers
在下面的示例中,我试图忽略所有 str1 等于 str2 的情况,即 str1 eq str2。以下是我面临的问题。
case1 : str1 = '{V1 0.85}' str2 = '{V1 0.850000}'
case2 : str1 = '{V1 0.65} {V2 关闭} {V_3 1.1}' str2 = '{V1 0.650000} {V2 关闭} {V_3 1.100000}'
case3 : str1 = '{V2 0.0} {V3 2.0} {V4 ON}' str2 = '{V2 0.0000000} {V3 2.000000} {V4 ON}'
如果从字符串中删除尾随 0,则上述每个示例都应满足条件 str1 =str2。
目前这是我正在使用的正则表达式:
$str2 =~ s/\.?0*}/\}/;
但它只在某些情况下有效。
对于上面的案例 2,它会删除第一个 {} 中的零,但不会删除第二个集合中的零,即
之前: str1 是'{v_0p65 0.65} {vout_off 关闭} {v_1p1 1.1}'
使用正则表达式后是'{v_0p65 0.65} {vout_off off} {v_1p1 1.100000}'
代码如下(太复杂,无法粘贴一小段):
str1 和 str2 是迭代接收的 2 个哈希值的精确输出
代码很简单
if ($str1 eq $str2) {
#Don't do anything
else {
print ("str1 and str2 are not equal\n");
}
s/ \K0*([0-9]+\.[0-9]+?)0*(?=})//g;
在英语中,在 space 和 } 之间,删除小数点前的前导零(不包括小数点前的零)和末尾的尾随零(不包括紧随其后的零小数点)。
/g
使它在同一个字符串中运行尽可能多的次数。这似乎是你遗漏的关键部分,尽管你的替换也有其他问题。
在下面的示例中,我试图忽略所有 str1 等于 str2 的情况,即 str1 eq str2。以下是我面临的问题。
case1 : str1 = '{V1 0.85}' str2 = '{V1 0.850000}'
case2 : str1 = '{V1 0.65} {V2 关闭} {V_3 1.1}' str2 = '{V1 0.650000} {V2 关闭} {V_3 1.100000}'
case3 : str1 = '{V2 0.0} {V3 2.0} {V4 ON}' str2 = '{V2 0.0000000} {V3 2.000000} {V4 ON}'
如果从字符串中删除尾随 0,则上述每个示例都应满足条件 str1 =str2。
目前这是我正在使用的正则表达式:
$str2 =~ s/\.?0*}/\}/;
但它只在某些情况下有效。 对于上面的案例 2,它会删除第一个 {} 中的零,但不会删除第二个集合中的零,即
之前: str1 是'{v_0p65 0.65} {vout_off 关闭} {v_1p1 1.1}'
使用正则表达式后是'{v_0p65 0.65} {vout_off off} {v_1p1 1.100000}'
代码如下(太复杂,无法粘贴一小段): str1 和 str2 是迭代接收的 2 个哈希值的精确输出 代码很简单
if ($str1 eq $str2) {
#Don't do anything
else {
print ("str1 and str2 are not equal\n");
}
s/ \K0*([0-9]+\.[0-9]+?)0*(?=})//g;
在英语中,在 space 和 } 之间,删除小数点前的前导零(不包括小数点前的零)和末尾的尾随零(不包括紧随其后的零小数点)。
/g
使它在同一个字符串中运行尽可能多的次数。这似乎是你遗漏的关键部分,尽管你的替换也有其他问题。