code: public static function DECTOOCT($x, $places = null)
      {
          $xorig = $x;
          $x = Functions::flattenSingleValue($x);
          $places = Functions::flattenSingleValue($places);
  
          if (is_bool($x)) {
              if (Functions::getCompatibilityMode() == Functions::COMPATIBILITY_OPENOFFICE) {
                  $x = (int) $x;
              } else {
                  return Functions::VALUE();
              }
          }
          $x = (string) $x;
          if (strlen($x) > preg_match_all('/[-0123456789.]/', $x, $out)) {
              return Functions::VALUE();
          }
          $x = (string) floor($x);
          $r = decoct($x);
          if (strlen($r) == 11) {
              //    Two's Complement
              $r = substr($r, -10);
          }
  
          return self::nbrConversionFormat($r, $places);
      }
docs: DECTOOCT.
  
  Return an decimal value as octal.
  
  Excel Function:
  DEC2OCT(x[,places])
  
  @category Engineering Functions
  
  @param string $x The decimal integer you want to convert. If number is negative,
  places is ignored and DEC2OCT returns a 10-character (30-bit)
  octal number in which the most significant bit is the sign bit.
  The remaining 29 bits are magnitude bits. Negative numbers are
  represented using two's-complement notation.
  If number < -536,870,912 or if number > 536,870,911, DEC2OCT
  returns the #NUM! error value.
  If number is nonnumeric, DEC2OCT returns the #VALUE! error value.
  If DEC2OCT requires more than places characters, it returns the
  #NUM! error value.
  @param int $places The number of characters to use. If places is omitted, DEC2OCT uses
  the minimum number of characters necessary. Places is useful for
  padding the return value with leading 0s (zeros).
  If places is not an integer, it is truncated.
  If places is nonnumeric, DEC2OCT returns the #VALUE! error value.
  If places is zero or negative, DEC2OCT returns the #NUM! error value.
  
  @return string