Perl - 将数字转换为 2 个十进制
Posted
技术标签:
【中文标题】Perl - 将数字转换为 2 个十进制【英文标题】:Perl - Convert Number to 2 Decimal 【发布时间】:2018-03-21 17:43:19 【问题描述】:我想将数字转换为小数。我一直在使用:
sprintf("%02d", $price / 12);
只有有时候$price
是一个整数,所以我得到的是06
而不是6
。如何确保它转换为小数点后 2 位,但也不在整数前加零?
【问题讨论】:
这似乎在数字前添加了一个空格:'6'而不是'6'perldoc -f sprintf
,寻找flags
只是为了清楚起见——我已经阅读了 Perl 文档。标志要么将其向左、向右对齐,要么使用零。我都不想要。我想要一个整数是简单的“6”,一个小数比如“6.22222222222”是“6.22”。
【参考方案1】:
sprintf('%.2f', $price/12) =~ s/\.00\z//r # 5.14+
或
do my $s = sprintf('%.2f', $price/12); $s =~ s/\.00\z//; $s
以上两种情况,
如果$price/12 == 5.999
,计算结果为6
如果$price/12 == 6
,计算结果为6
如果$price/12 == 6.001
,计算结果为6
如果$price/12 == 6.2
,计算结果为6.20
如果$price/12 == 6.22
,计算结果为6.22
如果$price/12 == 6.222
,计算结果为6.22
如果$price/12 == 6.229
,计算结果为6.23
【讨论】:
啊,我明白了。您的正则表达式似乎无效,但我明白了。您想将其转换为小数点后两位,然后去掉 .00。 @snakespan 怎么不呢?分配它——$p = (sprintf(..) =~ s/../../r);
——对吗?
@zdim,他们可能没有 5.14。当snakespan 写他们的信息时,第二个版本不是我回答的一部分。【参考方案2】:
int( $price / 6 + 0.5 );
Perl 会根据需要自动在字符串和数字之间切换。
【讨论】:
以上是关于Perl - 将数字转换为 2 个十进制的主要内容,如果未能解决你的问题,请参考以下文章