Change language:

# bcscale

(PHP 4, PHP 5)

bcscale모든 bc 수학 함수의 기본 scale 인수값 설정

### 설명

bool bcscale ( int \$scale )

scale 인수를 명시하지 않는 모든 bc 수학 함수의 기본 scale 인수값을 설정합니다.

scale

소수점 아래 자리수

### 반환값

성공할 경우 TRUE를, 실패할 경우 FALSE를 반환합니다.

### 예제

Example #1 bcscale() 예제

``` <?php// 기본 자리수 : 3bcscale(3);echo bcdiv('105', '6.55957'); // 16.007// bcscale() 없이 동일한 결과echo bcdiv('105', '6.55957', 3); // 16.007?> ```

### User Contributed Notes 4 notes

mwgamera at gmail dot com
6 years ago
``` These functions DO NOT round off your values. No arbitrary precision libraries do it this way. It stops calculating after reaching scale of decimal places, which mean that your value is cut off after scale number of digits, not rounded. To do the rounding use something like this: <?php         function bcround(\$number, \$scale=0) {                 \$fix = "5";                 for (\$i=0;\$i<\$scale;\$i++) \$fix="0\$fix";                 \$number = bcadd(\$number, "0.\$fix", \$scale+1);                 return    bcdiv(\$number, "1.0",    \$scale);         } ?> ```
ravenswd at gmail dot com
1 year ago
``` Simple, easy way to remove excess trailing zeros using rtrim: <php>   // \$total is the result of a bcmath calculation   if ( strpos(\$total, '.') !== false ):     \$total = rtrim(\$total, '0');     \$total = rtrim(\$total, '.');   endif; </php> ```
invincible at limitedintelligence dot com
7 years ago
``` If you don't set the default scale, be careful when you're chaining together several BC math functions - since by default, these functions will round off your values, losing accuracy very quickly: <?php \$a = 1.234 \$b = 2.345 \$c = 7.890 \$ab = bcmul(\$a,\$b);           // 2 \$abc = bcmul(\$ab,\$c); echo \$abc;                 // 15 ?> ... compare with the answer you get when you use more decimal places: <?php \$a = 1.234 \$b = 2.345 \$c = 7.890 bcscale(15); \$ab = bcmul(\$a,\$b);           // 2.893730 \$abc = bcmul(\$ab,\$c); echo \$abc;                 // 22.83152970 ?> ```
-1
rastislav dot bostik at bwd21 dot cz
1 year ago
``` Previously stated one liner trailing 0 removing using rtrim() works fine except following class of subcases: <?php echo rtrim('100.0000', '0.'); // 1 instead 100 echo rtrim('1230.00000000', '0.'); // 123 instead 1230 ?> What seems to be working to me is using regular expression replacement. Althought it`s probably not that fast as rtrim(), I hope it should be more reliable: <?php function removeFloatNumStringZeroTrailer(\$input) {     \$patterns = array('/[\.][0]+\$/','/([\.][0-9]*[1-9])([0]*)\$/');     \$replaces = array('','\$1');     return preg_replace(\$patterns,\$replaces,\$input); } echo removeFloatNumStringZeroTrailer('100.0000'); // says 100 echo removeFloatNumStringZeroTrailer('1230.00000000'); // says 1230 ?> ```