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 个十进制的主要内容,如果未能解决你的问题,请参考以下文章

php编程:将26位字母进制转换为10进制数字,如何做?

Perl,将数字键哈希转换为数组

在存储过程中将数字转换为压缩十进制

带小数的十进制数字和2进制数字相互转换的逻辑

在页面js 中,怎么将中文字符串转换成2个字节长度16进制数;并在js 环境下解码16进

PHP如何将从二进制文件中读取的字节转换为数字