문제

모든 변수에 대해 특별히 변경하지 않고도 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;  
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top