关于字符串:在Perl中获得浮点数的精度?

Getting precision of a float in Perl?

假设我有一个Perl变量:

my $string ="40.23";

my $convert_to_num = $string * 1;

有没有一种方法可以找到此float值的精度?到目前为止,我的解决方案是简单地循环遍历字符串,找到"。"的第一个实例,然后开始计算多少个小数位,在这种情况下返回2。我只是想知道对于这种事情是否有更优雅或内置的功能。谢谢!


这里是$ nstring

中"期后事物数"的答案

1
length(($nstring =~ /\\.(.*)/)[0]);

匹配部分首先找到。 (\\\\。),然后匹配其他所有内容(。*)。由于。*放在括号中,因此它作为第一个数组元素([0])返回。然后我用length()函数计算出多少个。


在Perl中使用纯变量执行的任何操作都将取决于您使用的编译器和硬件。如果您真的很在意精度,请使用

1
use"Math::BigFloat";

并设置所需的属性。在Math :: BigFloat中,位数更恰当地称为"准确性"。

1
2
3
4
5
6
7
use Math::BigFloat;

Math::BigFloat->accuracy(12);
$n = new Math::BigFloat"52.12";

print"Accuracy of $n is", $n->accuracy()," length",scalar($n->length()),"\
"
;

将返回

1
Accuracy of 52.1200000000 is 12 length 4