@ 2016-11-01T09:43:13Z <?php
$date = "2016/6";
$rate = "2.90";
$summer = 7;
$winter = 1;
$bonus = 100000;
$count = 180;
$amount = 6070000;
//料率 計算用
$calc_rate = $rate / 100;
# ボーナス回数
$bcount = getBonusCount($date, $count, $summer, $winter);
// ボーナス月テーブルの配列取得用
$bonusPattern = getBonusMonthPattern($summer, $winter);
//【1】BE33 ボーナス支払残高
// = IF(★ボーナス加算希望額=0, 0, IF(【1-1】="均等", 【1-2】, IF("ボーナス月回数=奇数", 【1-3】, 【1-4】)))
$bike_bonus_repay = getBikeBonusRepay($bonus, $bonusPattern, $date, $rate, $summer, $winter, $bcount);
echo $bike_bonus_repay . "\r\n";
echo $amount . "\r\n";
$bike_monthly_repay = round(pmt($calc_rate, $count, $amount - $bike_bonus_repay), 0, PHP_ROUND_HALF_DOWN);
echo $bike_monthly_repay;
function pmt($rate, $count, $amount) {
$count = $count; //支払回数
$rate = $rate / 12; //月利(%)
$amount = $rate * -$amount * pow((1 + $rate), $count) / (1 - pow((1 + $rate), $count)); //
return $amount;
}
function getBonusMonthPattern($summer, $winter) {
return $summer . "-" . $winter;
}
/**
*【1-1】AT21 間隔数利率 計算用値 均等 ot 不均等
* = VLOOKUP(★ボーナス加算月, [ボ月テーブル], 7, FALSE)
*/
function get1_1($pattern) {
$a_table = array(
"6-12" => 1, //"均等",
"7-1" => 1, //"均等",
"8-2" => 0, //"不均等",
"7-12" => 0, //"不均等",
"8-1" => 0, //"不均等",
);
return $a_table[$pattern];
}
/**
*【1】BE33 ボーナス支払残高
* = IF(★ボーナス加算希望額=0, 0, IF(【1-1】="均等", 【1-2】, IF("ボーナス月回数=奇数", 【1-3】, 【1-4】)))
*/
function getBikeBonusRepay($bonus, $pattern, $date, $rate, $summer, $winter, $bcount) {
$repay = 0;
if(0 == $bonus) {
return $repay;
}
if(1 == get1_1($pattern)) {
// *【1-2】BE16 ①ボーナス返済間隔均等
// * = +ROUNDUP(★ボーナス加算希望額 / 【1-2-1】, 0)
$repay = round($bonus / get1_2_1($date, $rate, $summer, $winter, $bcount), 0);
} else {
if(0 > $bcount % 2) { //支払回数 奇数
$repay = get1_3($date, $rate, $summer, $winter, $bonus, $bcount);
} else { //支払回数 偶数
$repay = get1_4($date, $rate, $summer, $winter, $bonus, $bcount);
}
}
return $repay;
}
function get1_4($date, $rate, $summer, $winter, $bonus, $bcount) {
//【1-3-1-1-1】AQ11 「初回利率」(少数12桁)
$b_first_rate = getFirstRate($date, $rate, $summer, $winter);
//【1-3-1-1-2】AP4 「月利」(少数12桁)
$b_month_rate = getMonthlyRate($rate);
//【1-3-1-1-4】AV18 ボーナス月と支払開始月からとりだす計算用の数値
//【1-3-1-1-3】AW18
list($keyNumber1, $keyNumber2) = getKeyNumbers($date, $summer);
// *【1-4-1-1】AP18 「賦金率分子」
$b_inst_numerator = (1 + $b_first_rate) * pow((1 + $b_month_rate * $keyNumber2), ($bcount / 2)) * pow((1 + $b_month_rate * $keyNumber1), ($bcount/ 2 - 1)) * ((1 + $b_month_rate * $keyNumber2) * (1 + $b_month_rate * $keyNumber1) - 1);
// *【1-4-1-2】AP19 「賦金率分母」
$b_inst_denominator = (1 + (1 + $b_month_rate * $keyNumber2)) * (pow((1 + $b_month_rate * $keyNumber2), ($bcount / 2)) * pow((1 + $b_month_rate * $keyNumber1), ($bcount / 2)) - 1);
// *【1-4-1】BE19
// * = +ROUNDDOWN(【1-4-1-1】/【1-4-1-2】, 12)
$b_result = round($b_inst_numerator / $b_inst_denominator, 12, PHP_ROUND_HALF_DOWN);
//【1-4】BE20 ②ボーナス不均・偶数
// = +ROUNDUP(★ボーナス加算希望額 / 【1-4-1】, 0)
return round($bonus / $b_result, 0, PHP_ROUND_HALF_UP);
}
/**
*【1-3-1-1-4】AV18 ボーナス月と支払開始月からとりだす計算用の数値
* = +IF(ボーナス月1 = 8, VLOOKUP(★開始月, "1~12", 2, 0), VLOOKUP(★開始月, "5 or 7", 3, 0))
* $keyNumber1
*
*【1-3-1-1-3】AW18
* = +IF(【1-3-1-1-4】 = 5, 7, 5)
* $keyNumber2
*/
function getKeyNumbers($date, $summer) {
$t_date = explode("/", $date);
$month = $t_date[1];
if(8 == $summer) {
$a_bonusMonthArray = array( 1 => 7, 2 => 7, 3 => 7, 4 => 7, 5 => 7, 6 => 7, 7 => 7, 8 => 5, 9 => 5, 10 => 5, 11 => 5, 12 => 5);
} else {
$a_bonusMonthArray = array( 1 => 5, 2 => 7, 3 => 7, 4 => 7, 5 => 7, 6 => 7, 7 => 7, 8 => 7, 9 => 5, 10 => 5, 11 => 5, 12 => 5);
}
$keyNumber1 = $a_bonusMonthArray[$month];
// ???
if(5 == $keyNumber1) {
$keyNumber2 = 7;
} else {
$keyNumber2 = 5;
}
return array($keyNumber1, $keyNumber2);
}
/**
*【1-3-1-1-2】AP4 「月利」(少数12桁)
* = ROUND(★手数料率(年利) / 12, 12)
*/
function getMonthlyRate($rate) {
return round($rate / 12, 12);
}
function getFirstRate($date, $rate, $summer, $winter) {
//【1-2-1-2】AP11 「初回利率」(少数5桁)
// = +ROUNDDOWN(★手数料率(年利) * 【1-2-1-2-1】 / 12, 5)
// 【1-2-1-2-1】AP10 「初回期間」※支払開始後、最初のボーナス月までのヶ月
$t_date = explode("/", $date);
$month = $t_date[1];
$monthCount = 0;
while($monthCount < 12) {
$monthCount++;
$check = $month + $monthCount;
if($check > 12) {
$check = $check - 12;
}
if($check == $summer || $check == $winter) {
$monthCount++;
break;
}
}
return round($rate * $monthCount / 12, 12, PHP_ROUND_HALF_DOWN);
}
function getBonusCount($date, $count = NULL, $summer = NULL, $winter = NULL) {
# 月
$t_date = explode("/", $date);
# 支払回数未設定
if (!$count) {
return 0;
}
# ボーナス月未設定
if (!$summer && !$winter) {
return 0;
}
# ボーナス回数
$bcount = 0;
if (12 > $count) {
$i = $t_date[1];
$j = $i + $count;
$k = 0;
$l = 0;
for ($k = $i; $k < $j; $k ++) {
$l = $k > 12 ? $k - 12 : $k;
if ($summer == $l) {
$bcount ++;
}
if ($winter == $l) {
$bcount ++;
}
}
} else {
# 年2回
if ($summer && $winter) {
$bcount = $count / 6;
}
# 年1回
else {
$bcount = $count / 12;
}
}
return $bcount;
}
/**
*【1-2-1】data!AP15 「賦金率」
* = +ROUNDDOWN(【1-2-1-1】 * (1 + 【1-2-1-2】) * 【1-2-1-3】 / (【1-2-1-4】 - 1), 12)
*
*/
function get1_2_1($date, $rate, $summer, $winter, $bcount) {
//【1-2-1-1】AP7 「ボーナス利率」
// = +ROUNDDOWN(★手数料率(年利) * 6 / 12, 5)
$b_rate = round($rate * 6 / 12, 5, PHP_ROUND_HALF_DOWN);
//【1-2-1-2】AP11 「初回利率」(少数5桁)
$b_first_rate = getFirstRate($date, $rate, $summer, $winter);
//【1-2-1-3】AP8 「間隔数利率」
// = ROUNDDOWN((1 + 【1-2-1-1】)^(【1-0-1】-1),12)
$b_interval_rate = round(pow((1 + $b_rate), ($bcount - 1)), 12, PHP_ROUND_HALF_DOWN);
//【1-2-1-4】AP9 「回数利率」
// = ROUNDDOWN((1 + 【1-2-1-1】)^(【1-0-1】),12)
$b_count_rate = round(pow(1 + $b_rate, $bcount), 12, PHP_ROUND_HALF_DOWN);
//= +ROUNDDOWN(【1-2-1-1】 * (1 + 【1-2-1-2】) * 【1-2-1-3】 / (【1-2-1-4】 - 1), 12)
$b_inst_rate = round($b_rate * (1 + $b_first_rate) * $b_interval_rate / ($b_count_rate - 1), 12, PHP_ROUND_HALF_DOWN);
return $b_inst_rate;
}
Enable javascript to submit You have javascript disabled. You will not be able to edit any code.
Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).
Version System time (s) User time (s) Memory (MiB) 8.3.6 0.013 0.006 16.88 8.3.5 0.014 0.007 16.72 8.3.4 0.015 0.004 19.29 8.3.3 0.006 0.012 19.25 8.3.2 0.004 0.004 19.25 8.3.1 0.000 0.007 22.15 8.3.0 0.004 0.004 22.24 8.2.18 0.010 0.007 16.75 8.2.17 0.018 0.004 22.96 8.2.16 0.004 0.011 22.33 8.2.15 0.008 0.000 24.18 8.2.14 0.008 0.000 24.66 8.2.13 0.004 0.004 20.27 8.2.12 0.009 0.000 26.35 8.2.11 0.006 0.003 22.39 8.2.10 0.000 0.011 18.41 8.2.9 0.000 0.009 18.13 8.2.8 0.003 0.006 18.13 8.2.7 0.005 0.003 18.30 8.2.6 0.000 0.008 18.59 8.2.5 0.003 0.006 18.10 8.2.4 0.008 0.003 20.92 8.2.3 0.008 0.000 21.36 8.2.2 0.005 0.003 18.39 8.2.1 0.008 0.000 18.38 8.2.0 0.000 0.008 18.05 8.1.28 0.009 0.009 25.92 8.1.27 0.003 0.006 24.27 8.1.26 0.004 0.004 28.09 8.1.25 0.008 0.000 28.09 8.1.24 0.003 0.006 21.19 8.1.23 0.009 0.003 18.14 8.1.22 0.008 0.000 18.26 8.1.21 0.004 0.004 18.77 8.1.20 0.004 0.004 17.72 8.1.19 0.003 0.007 17.72 8.1.18 0.000 0.008 18.10 8.1.17 0.000 0.008 22.05 8.1.16 0.004 0.004 22.44 8.1.15 0.000 0.008 20.64 8.1.14 0.000 0.008 19.94 8.1.13 0.000 0.008 18.00 8.1.12 0.000 0.007 17.88 8.1.11 0.005 0.003 17.71 8.1.10 0.000 0.009 17.78 8.1.9 0.004 0.004 17.68 8.1.8 0.005 0.003 17.82 8.1.7 0.004 0.004 17.73 8.1.6 0.008 0.000 17.89 8.1.5 0.008 0.000 17.88 8.1.4 0.004 0.004 17.70 8.1.3 0.009 0.000 17.91 8.1.2 0.000 0.008 17.93 8.1.1 0.003 0.005 17.91 8.1.0 0.003 0.005 17.76 8.0.30 0.003 0.005 18.77 8.0.29 0.004 0.004 17.13 8.0.28 0.004 0.004 18.62 8.0.27 0.000 0.007 17.65 8.0.26 0.003 0.003 17.46 8.0.25 0.003 0.005 17.43 8.0.24 0.000 0.008 17.25 8.0.23 0.004 0.004 17.36 8.0.22 0.007 0.000 17.17 8.0.21 0.003 0.005 17.28 8.0.20 0.007 0.006 17.34 8.0.19 0.000 0.007 17.29 8.0.18 0.000 0.007 17.33 8.0.17 0.000 0.009 17.24 8.0.16 0.005 0.002 17.30 8.0.15 0.006 0.006 17.20 8.0.14 0.000 0.007 17.26 8.0.13 0.003 0.003 13.80 8.0.12 0.004 0.004 17.32 8.0.11 0.000 0.007 17.33 8.0.10 0.000 0.008 17.33 8.0.9 0.000 0.008 17.26 8.0.8 0.010 0.006 17.26 8.0.7 0.005 0.003 17.16 8.0.6 0.000 0.008 17.14 8.0.5 0.005 0.003 17.34 8.0.3 0.009 0.012 17.44 8.0.2 0.009 0.013 17.49 8.0.1 0.006 0.003 17.45 8.0.0 0.006 0.012 17.18 7.4.33 0.003 0.003 15.55 7.4.32 0.000 0.007 16.82 7.4.30 0.003 0.003 16.82 7.4.29 0.000 0.007 16.84 7.4.28 0.006 0.005 16.80 7.4.27 0.000 0.007 16.90 7.4.26 0.004 0.004 16.79 7.4.25 0.000 0.007 16.70 7.4.24 0.004 0.004 16.73 7.4.23 0.000 0.007 16.98 7.4.22 0.006 0.012 16.86 7.4.21 0.006 0.011 16.88 7.4.20 0.004 0.003 16.97 7.4.16 0.011 0.004 16.79 7.4.15 0.013 0.009 17.40 7.4.14 0.008 0.011 17.86 7.4.13 0.009 0.010 16.76 7.4.12 0.011 0.008 16.70 7.4.11 0.014 0.011 16.97 7.4.10 0.011 0.006 16.89 7.4.9 0.008 0.014 16.64 7.4.8 0.007 0.010 19.39 7.4.7 0.005 0.014 16.72 7.4.6 0.010 0.007 16.79 7.4.5 0.009 0.006 16.77 7.4.4 0.006 0.013 16.88 7.4.3 0.010 0.006 16.80 7.4.0 0.010 0.007 15.38 7.3.33 0.004 0.004 13.68 7.3.32 0.000 0.006 13.56 7.3.31 0.000 0.007 16.72 7.3.30 0.003 0.003 16.57 7.3.29 0.005 0.012 16.63 7.3.28 0.011 0.008 16.66 7.3.27 0.009 0.008 17.40 7.3.26 0.014 0.006 16.68 7.3.25 0.011 0.007 16.70 7.3.24 0.007 0.011 16.82 7.3.23 0.017 0.000 16.77 7.3.21 0.013 0.004 16.85 7.3.20 0.011 0.006 16.68 7.3.19 0.012 0.009 16.92 7.3.18 0.008 0.008 16.62 7.3.17 0.014 0.007 16.68 7.3.16 0.012 0.006 16.75 7.2.33 0.012 0.006 17.11 7.2.32 0.015 0.003 17.01 7.2.31 0.006 0.011 17.18 7.2.30 0.006 0.012 16.99 7.2.29 0.009 0.009 17.15 7.2.6 0.004 0.008 17.11 7.2.5 0.008 0.003 17.13 7.2.0 0.007 0.007 19.62 7.1.20 0.003 0.007 15.63 7.1.7 0.007 0.000 17.11 7.1.6 0.006 0.006 17.15 7.1.0 0.007 0.063 22.66 7.0.20 0.020 0.003 14.80 7.0.12 0.000 0.087 22.36 7.0.11 0.007 0.087 22.26 7.0.10 0.013 0.070 22.27 7.0.9 0.010 0.080 22.18 7.0.8 0.003 0.067 22.18 7.0.7 0.023 0.067 22.31 7.0.6 0.010 0.077 22.16 7.0.5 0.010 0.080 22.34 7.0.4 0.007 0.070 22.42 7.0.3 0.007 0.057 22.13 7.0.2 0.010 0.063 22.29 7.0.1 0.010 0.060 22.18 7.0.0 0.013 0.053 22.22 5.6.27 0.023 0.063 21.33 5.6.26 0.010 0.063 21.32 5.6.25 0.010 0.067 21.30 5.6.24 0.003 0.083 21.02 5.6.23 0.013 0.073 21.27 5.6.22 0.007 0.073 21.25 5.6.21 0.003 0.083 21.23 5.6.20 0.010 0.077 21.23 5.6.19 0.010 0.057 21.00 5.6.18 0.010 0.060 21.34 5.6.17 0.017 0.067 21.13 5.6.16 0.013 0.057 21.02 5.6.15 0.013 0.060 20.94 5.6.14 0.003 0.070 21.05 5.6.13 0.000 0.063 21.29 5.6.12 0.003 0.063 21.18 5.6.11 0.017 0.070 21.21 5.6.10 0.010 0.067 21.27 5.6.9 0.017 0.060 21.32 5.6.8 0.013 0.047 20.43 5.6.7 0.013 0.057 20.46 5.6.6 0.000 0.080 20.63 5.6.5 0.020 0.060 20.61 5.6.4 0.010 0.050 20.67 5.6.3 0.013 0.053 20.49 5.6.2 0.017 0.057 20.38 5.6.1 0.010 0.063 20.37 5.6.0 0.007 0.053 20.47
preferences:dark mode live preview
65.93 ms | 401 KiB | 5 Q