日曜日, 8月 30, 2026

Let's start JavaScript 109 
cmと尺単位(曲尺、鯨尺)変換

個人的に必要だったので作ってみました。尺貫法における「尺」の単位には、建築、土木、木工などの現場で用いる曲尺(かねじゃく)と、呉服や和裁など、着物の生地を測る際に用いる鯨尺(くじらじゃく)の2種類があります。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>cm・曲尺・鯨尺 相互変換</title>
<style>
body{
background: black;
color: white;
font-family: sans-serif;
margin: 20px;
}
.container{
max-width:250px;
margin:auto;
background:black;
padding:10px;
}
h3{
text-align:center;
}
.row{
display:flex;
align-items:center;
margin:15px 0;
}
label{
width:50px;
font-weight:bold;
}
input{
flex:1;
padding:8px;
font-size:12px;
}
</style>
</head>
<body>

<div class="container">
<h3>cm/曲尺/鯨尺/長さ相互変換</h3>

<div class="row">
<label>cm</label>
<input type="number" id="cm" step="0.001">
</div>

<div class="row">
<label>曲尺</label>
<input type="number" id="kane" step="0.001">
</div>

<div class="row">
<label>鯨尺</label>
<input type="number" id="kujira" step="0.001">
</div>

</div>

<script>
const CM_PER_KANE = 30.3;
const CM_PER_KUJIRA = 37.88;

const cm = document.getElementById("cm");
const kane = document.getElementById("kane");
const kujira = document.getElementById("kujira");

let updating = false;

function round(v){
return Number(v.toFixed(3));
}

cm.addEventListener("input", ()=>{
if(updating) return;
updating = true;

let c = parseFloat(cm.value);
if(isNaN(c)){
kane.value = "";
kujira.value = "";
}else{
kane.value = round(c / CM_PER_KANE);
kujira.value = round(c / CM_PER_KUJIRA);
}

updating = false;
});

kane.addEventListener("input", ()=>{
if(updating) return;
updating = true;

let k = parseFloat(kane.value);
if(isNaN(k)){
cm.value = "";
kujira.value = "";
}else{
let c = k * CM_PER_KANE;
cm.value = round(c);
kujira.value = round(c / CM_PER_KUJIRA);
}

updating = false;
});

kujira.addEventListener("input", ()=>{
if(updating) return;
updating = true;

let k = parseFloat(kujira.value);
if(isNaN(k)){
cm.value = "";
kane.value = "";
}else{
let c = k * CM_PER_KUJIRA;
cm.value = round(c);
kane.value = round(c / CM_PER_KANE);
}

updating = false;
});
</script>

</body>
</html>

実行直後の画面です。

曲尺で1尺を設定した結果。

鯨尺で1尺を設定した結果。

cmで1cmを設定した結果。