search for in the

 Last updated: Sat, 07 Jan 2012

# 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?> ```

 Last updated: Sat, 07 Jan 2012

User Contributed Notes bcscale - [6 notes]
mwgamera at gmail dot com
5 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> ```
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 ?> ```
dcz at phpbb-seo dot com
2 years ago
``` The general approach for a one liner trailing 0 removing would be : <?php echo rtrim('1.2500000000', '0.'); // 1.25 echo rtrim('1.00000000', '0.'); // 1 ?> Which seems totally appropriate since we are working with strings, and also is likely to be the fastest way. ```
Nitrogen
4 years ago
``` Good day, I made a little function to remove the excess zeroes after calculations.. it makes them cleaner and more presentable. <?php function DecimalClean(\$Input) {   \$Input=explode('.',\$Input,2);   if(!isset(\$Input[1])) \$Input[1]=0;   for(\$i=(strlen(\$Input[1])-1);\$i>0;\$i--) {     if(\$Input[1]{\$i}=='0')       \$Input[1]=substr(\$Input[1],0,-1);     else break;   }   return(sprintf('%s%s',\$Input[0],(\$Input[1]!='0')?".{\$Input[1]}":'')); } BCScale(10); // allow 10 decimals \$Sum = BCDiv(10,8); // make a calculation printf("Result #1: %s\n", \$Sum); // 1.2500000000 printf("Result #2: %s\n", DecimalClean(\$Sum)); // 1.25 ?> Hope this helps, Nitrogen. ```
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 ?> ```