質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1727閲覧

stop watchのミリ秒を分に変換する部分に疑問が

beginner001

総合スコア29

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2020/05/09 05:03

編集2020/05/09 23:31
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8">
<title>ストップウォッチ</title> <style> /* ここにCSSを書いていきます。 */ </style>
</head> <body> <div class="container"> <h1 class="title">StopWatch</h1> <h1 id="timerLabel">00:00:00</h1> <input type="button" class="myButton" onclick="start()" value="START" id="startBtn"> <input type="button" class="myButton" onclick="stop()" value="STOP"> <input type="button" class="myButton" onclick="reset()" value="RESET"> </div> <script> var status = 0; // 0:停止中 1:動作中 var time = 0; var startBtn = document.getElementById("startBtn"); var timerLabel = document.getElementById('timerLabel'); // STARTボタン function start(){ status = 0; status = 1; // スタートボタンを押せないようにする startBtn.disabled = true; timer(); } // STOPボタン function stop(){ // 停止中にする status = 0; // スタートボタンを押せるようにする startBtn.disabled = false; } // RESETボタン function reset(){ // 停止中にする status = 0; // タイムを0に戻す time = 0; // タイマーラベルをリセット timerLabel.innerHTML = '00:00:00'; // スタートボタンを押せるようにする startBtn.disabled = false; }
function timer(){ // ステータスが動作中の場合のみ実行 if (status == 1) { setTimeout(function() { time++; // 分・秒・ミリ秒を計算 var min = Math.floor(time/100/60); var sec = Math.floor(time/100); var mSec = time % 100; var min = Math.floor(time/1000); var sec = Math.floor(time/100-time/1000); var mSec = time%100; // 分が1桁の場合は、先頭に0をつける if (min < 10) min = "0" + min; // 秒が60秒以上の場合 例)89秒→29秒にする if (sec >= 60) sec = sec % 60; // 秒が1桁の場合は、先頭に0をつける if (sec < 10) sec = "0" + sec; // ミリ秒が1桁の場合は、先頭に0をつける if (mSec < 10) mSec = "0" + mSec; // タイマーラベルを更新 timerLabel.innerHTML = min + ":" + sec + ":" + mSec; // 再びtimer()を呼び出す timer(); }, 10); } }
</script> </body>

https://codeforfun.jp/javascript-stopwatch/ からの引用です。
この記述の最後の function timer{}の部分が理解できません。
setTimeout関数 (処理内容、実行タイミング)

ここは10だから10ミリ秒、つまり10分の1秒と考える。
var min = Math.floor(time/100/60);
var sec = Math.floor(time/100);
var mSec = time % 100;

この記述を自分が分かりやすいように以下のように変えてみました。
var min = Math.floor(time/1000);  ←/1000で分が出ると考えました
var sec = Math.floor(time/100-time/1000);
var mSec = time; ←10分の1秒

何分何秒まではちゃんと表示されますが、最後の10分の1秒が出ません。
すると最後の10分の1秒の部分の表示がおかしくなりました。
どこに問題があるのでしょうか?
ご指摘いただければありがたいです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/09 05:27

> この記述を自分が分かりやすいように以下のように変えてみました。 何故その数字に変えたのか教えて頂けますでしょうか。 そこの数字だけそのように変えたら、10分の1秒だけでなく、分と秒も狂うと思いますが…
m.ts10806

2020/05/09 06:52

動かないとかそういう意味ではないのですけど、 行間は詰め過ぎても空けすぎても読みづらいかと。
Zuishin

2020/05/09 23:43

> ここは10だから10ミリ秒、つまり10分の1秒と考える。 こことは違う世界のお話なので参考にしない方がいいかと。こちらの 10ms は 1/100s です。
m.ts10806

2020/05/10 00:33

マークダウンをなぜ切った・・・
guest

回答1

0

自己解決

let min = Math.floor(time/100/60); 10ミリ秒/100/60をすれば分になる
let sec = Math.floor(time/100);   10ミリ秒/100をすれば秒になる
let mSec = time%100         10ミリ秒/100をしたときの余りが10分の1秒になる

やっと分かりました。
皆様、ありがとうございました。

投稿2020/05/10 03:10

beginner001

総合スコア29

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問