開発環境 メモ帳
実行環境 Internet Explorer 11


recurring.html
<!doctype html>
<head>
<title>recurring</title>
<script>
 
function calc()
{
	output.innerHTML = "";
 
	var n = parseInt(numerator.value);	// 分子
	var d = parseInt(denominator.value);	// 分母
	output.innerHTML += n + "/" + d + "=<br>";
 
	division(n, d);
}
 
// 除法
function division(n, d)
{
	// 整数部分
	var q = Math.floor(n / d);	// quotient 商
	var r = n - d * q;		// remainder 剰余
	output.innerHTML += q + ".";
 
	// 小数部分
	var m = [r];	// 剰余メモリー
	var str = "";
 
	Loop:
	for (var i = 1; ; i++) {
		r *= 10;
		q = Math.floor(r / d);
		r -= d * q;
		str += q;
		if (r <= 0) break;	// 割り切れた
		for (var j = 0; j < i; j++) {
			if (m[j] == r) {
				str = str.substr(0, j) + "(" + str.slice(j - i) + ")";
				break Loop;	// 循環小数
			}
		}
		m[i] = r;
 
		if (1000 <= i) {
			output.innerHTML += "ループ回数オーバー<br>";
			return;
		}
	}
 
	output.innerHTML += str + "<br>";
}
 
</script>
</head>
 
<body>
整数同士の割算を行います。必要であれば循環小数(recurring decimal)で表記します。<br>
<input id="numerator" autofocus> /
<input id="denominator"><br>
<button onclick="calc()">計算</button><br>
<div id="output" style="word-wrap:break-word;"></div>
</body>
 
最終更新:2015年03月11日 16:34