String 在Perl中获得浮点的精度?
假设我有一个Perl变量:String 在Perl中获得浮点的精度?,string,perl,floating-point,decimal,String,Perl,Floating Point,Decimal,假设我有一个Perl变量: my$string=“40.23” my$convert_to_num=$string*1 有没有办法找到这个浮点值的精度?到目前为止,我的解决方案是简单地循环字符串,找到“.”的第一个实例,然后开始计算小数位数,在本例中返回2。我只是想知道是否有一个更优雅的或内置的功能为这类事情。谢谢 使用纯变量在Perl中执行的任何操作都将取决于所使用的编译器和硬件。如果你真的关心精度,使用 use "Math::BigFloat"; 并设置所需的属性。在Math::BigFl
my$string=“40.23”代码>
my$convert_to_num=$string*1代码>
有没有办法找到这个浮点值的精度?到目前为止,我的解决方案是简单地循环字符串,找到“.”的第一个实例,然后开始计算小数位数,在本例中返回2。我只是想知道是否有一个更优雅的或内置的功能为这类事情。谢谢 使用纯变量在Perl中执行的任何操作都将取决于所使用的编译器和硬件。如果你真的关心精度,使用
use "Math::BigFloat";
并设置所需的属性。在Math::BigFloat中,数字的数量更恰当地称为精度
use Math::BigFloat;
Math::BigFloat->accuracy(12);
$n = new Math::BigFloat "52.12";
print "Accuracy of $n is ", $n->accuracy(), " length ",scalar($n->length()),"\n";
会回来的
Accuracy of 52.1200000000 is 12 length 4
52.1200000000的精度为12长度4
下面是对$nstring中“周期后的事件数”的回答
length(($nstring =~ /\.(.*)/)[0]);
匹配的部分首先找到。(\),然后匹配其他所有内容(.*)。由于.*在括号中,因此它作为第一个数组元素([0])返回。然后我用length()函数数一数有多少人。沿着这条路走下去就是疯狂。除了少数特殊情况外,将十进制精度指定给数字的浮点表示形式是徒劳的。执行此代码并重新考虑您的问题:perl-e'printf“%.*f\n”、$,“40.23”代表14,15,41'
我无法无错误地运行该代码?在阅读问题时,问题不在于根据存储为浮点或大浮点的值计算小数位数,而在于计算输入数字小数点后出现的位数。也就是说,一个字符串已经被读取,问题在于字符串处理,而不是数值计算。对吗?没错,是的。我只是想知道是否有内置函数或标准解决方案来返回数字和/或字符串中的小数位数。我在上面的研究和我提出的解决方案之后找不到任何东西。精度与小数位数有什么关系?问题是我无法设置它。我正在读取Excel电子表格中的单元格,只想读取电子表格中的内容,而不是设置自己的全局限制。是什么阻止您读取电子表格中的值并将其作为大浮点数存储在内部?我认为这取决于程序员如何处理从外部源接收的数据。是的,我同意,我正在这样做。但我还需要存储的一个字段是小数位数。length()运算符告诉我小数位数。(在这种情况下,4)谢谢你的帮助,这正是我要找的!