Perl에서 부동 소수점 정밀도를 어떻게 설정합니까?
-
12-09-2019 - |
문제
모든 변수에 대해 특별히 변경하지 않고도 Perl 스크립트의 부동 소수점 정밀도 (3 자리)를 설정하는 방법이 있습니까?
TCL과 유사한 것 :
global tcl_precision
set tcl_precision 3
해결책
이것을 전 세계적으로 바꿀 방법은 없습니다.
디스플레이 목적으로 만 사용하는 경우 사용하십시오 sprintf("%.3f", $value);
.
수학적 목적으로 사용하십시오 (int(($value * 1000.0) + 0.5) / 1000.0)
. 이것은 양수에 효과적입니다. 그래도 음수로 작동하도록 변경해야합니다.
다른 팁
사용 Math::BigFloat
또는 bignum
:
use Math::BigFloat;
Math::BigFloat->precision(-3);
my $x = Math::BigFloat->new(1.123566);
my $y = Math::BigFloat->new(3.333333);
또는 함께 bignum
대신 :
use bignum ( p => -3 );
my $x = 1.123566;
my $y = 3.333333;
두 경우 모두 :
say $x; # => 1.124
say $y; # => 3.333
say $x + $y; # => 4.457
Sprintf ( "%. 3f", $ value)를 사용하지 않는 것이 좋습니다.
다음 예를보십시오. (6.02*1.25 = 7.525)
printf("%.2f", 6.02 * 1.25) = 7.52
printf("%.2f", 7.525) = 7.53
결과를 문자열로 취급하고 사용하십시오 substr
. 이와 같이:
$result = substr($result,0,3);
반올림을하고 싶다면 문자열로도 수행하십시오. 다음 캐릭터를 얻고 결정하십시오.
또는 다음을 사용하여 소수점 이후 세 번째 숫자 이후에 나오는 모든 것을 잘라낼 수 있습니다.
if ($val =~ m/([-]?[\d]*\.[\d]{3})/) {
$val = $1;
}
제휴하지 않습니다 StackOverflow