<?php

namespace loyalsoft;

/**
 * 针对 int 数据做的特殊操作
 * @author gwang
 */
class Ints
{

    /**
     * int 骚操作, 提取第几位到第几位的值(左数)
     * @param int $i Int值
     * @param int $start 左边数第几位, 第一位是0
     * @param int $len 截取长度
     * @param bool $throwException 是否抛出异常,默认false
     * @return string
     * @throws \Exception
     */
    public static function Slice(int $i, int $start, int $len, bool $throwException = false): int
    {
        $i_len = strlen("$i");
        if ($throwException) {
            if ($start < 0 || $start > 18) {
                throw new \Exception("start is out of range!");
            }
            if ($len <= 0 || $start + $len > $i_len) {
                throw new \Exception("end is out of range!");
            }
        }
        $start = $start < 0 ? 0 : $start;
        $start = $start > $i_len ? $i_len : $start;
        $len = $len < 0 ? 0 : $len;
        $len = ($start + $len) > $i_len ? $i_len - $start : $len;

        $r = (int) Pow(10, $i_len - $start - $len);
        $l = (int) Pow(10, $i_len - $start);
        $ret = $i - intval($i / $l) * $l;    // 去除左边
        $ret /= $r;                          // 去除右边
        return (int) $ret;
    }
}
