toFixedメソッドが適用されない
解決済
回答 2
投稿
- 評価
- クリップ 0
- VIEW 496
下記コードのupdateTime関数内の変数「accuration」において、toFixedメソッドを通しているのですが、適用されなかった為、原因が分からずご質問させて頂きました。
'use strict';
{
let words = ['blue','apple','sky','middle','set'];
let word;
let isPlaying = false;
let loc = 0;
let target;
let letter_count = 0;
let miss_count = 0;
let miss_label;
let letter_label;
let timeLimit;
timeLimit = 3 * 1000;
let start_time;
let time_label = document.getElementById('time_left');
let accuracy
window.addEventListener('click',() => {
if(isPlaying == true){
return;
}
function updateTime(){
let time_left = start_time + timeLimit - Date.now();
time_label.textContent = (time_left / 1000) .toFixed(2);
const time_out_id = setTimeout(() => {
updateTime();
},10);
if(time_left < 0){
isPlaying = false;
clearTimeout(time_out_id);
if(letter_count == 0 && miss_count == 0){
accuracy = 0;
}else if(miss_count == 0){
accuracy = 100
}else if(letter_count == 0){
accuracy = 0;
}else{
accuracy = (miss_count / letter_count) * 100;
accuracy.toFixed(2);
console.log(accuracy);
}
console.log(miss_count);
console.log(letter_count);
window.alert(letter_count + 'letters,' + miss_count + 'misses, ' + accuracy + '%accuracy!');
}
}
isPlaying = true;
letter_label = document.getElementById('Letter_label');
miss_label = document.getElementById('Letter_miss_label');
target = document.getElementById('top_word');
word = words[Math.floor(Math.random() * words.length)];
target.textContent = word;
start_time = Date.now();
updateTime();
});
window.addEventListener('keyup', e => {
if(isPlaying === true){
let placeholder = '';
if(e.key == word[loc]){
loc++;
letter_count += 1;
console.log(letter_count);
letter_label.textContent = letter_count;
for(let i = 0; i < loc; i++){
placeholder += '_';
}
console.log(word.substring(loc));
console.log(placeholder);
target.textContent = placeholder + word.substring(loc);
}else{
miss_count++;
miss_label.textContent = miss_count;
}
if(loc == word.length){
word = words[Math.floor(Math.random() * words.length)];
target.textContent = word;
loc = 0;
}
}
});
}
updateTimeメソッド内のaccurationが「33.33333」であったとしても、toFixedメソッドを通した場合でも、変わらず、console.log(accuracy);の出力結果は変わらず、「33.33333」になってしまいます。
原因究明の為、ご助言頂けましたら幸いです。
-
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
クリップを取り消します
-
良い質問の評価を上げる
以下のような質問は評価を上げましょう
- 質問内容が明確
- 自分も答えを知りたい
- 質問者以外のユーザにも役立つ
評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。
質問の評価を上げたことを取り消します
-
評価を下げられる数の上限に達しました
評価を下げることができません
- 1日5回まで評価を下げられます
- 1日に1ユーザに対して2回まで評価を下げられます
質問の評価を下げる
teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。
- プログラミングに関係のない質問
- やってほしいことだけを記載した丸投げの質問
- 問題・課題が含まれていない質問
- 意図的に内容が抹消された質問
- 過去に投稿した質問と同じ内容の質問
- 広告と受け取られるような投稿
評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。
質問の評価を下げたことを取り消します
この機能は開放されていません
評価を下げる条件を満たしてません
質問の評価を下げる機能の利用条件
この機能を利用するためには、以下の事項を行う必要があります。
- 質問回答など一定の行動
-
メールアドレスの認証
メールアドレスの認証
-
質問評価に関するヘルプページの閲覧
質問評価に関するヘルプページの閲覧
checkベストアンサー
+1
変換した値を代入していないのが問題です。
accuracy = accuracy.toFixed(2);
toFixedは文字列で返すのでaccuacyを常に数値にしたければ、数値に直す必要があります。
以下の好きな方法で数値に変換すれば良いと思います。
// Numberでキャストして数値にする
accuracy = Number(accuracy.toFixed(2));
// +演算子で数値にする
accuracy = +accuracy.toFixed(2);
// parseFloatで数値にする
accuracy = parseFloat(accuracy.toFixed(2));
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
+1
toFixedは引数に与えられた変数そのものは変更しませんよ。
あと、数値型(Number)は不変なので変更もできないと思います。
なので、次のようにする必要があると思います。
formattedAccuracy = accuracy.toFixed(2);
console.log(formattedAccuracy);
投稿
-
回答の評価を上げる
以下のような回答は評価を上げましょう
- 正しい回答
- わかりやすい回答
- ためになる回答
評価が高い回答ほどページの上位に表示されます。
-
回答の評価を下げる
下記のような回答は推奨されていません。
- 間違っている回答
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。
15分調べてもわからないことは、teratailで質問しよう!
- ただいまの回答率 88.34%
- 質問をまとめることで、思考を整理して素早く解決
- テンプレート機能で、簡単に質問をまとめられる
質問への追記・修正、ベストアンサー選択の依頼
m.ts10806
2019/08/19 12:27
そもそもご自身は原因究明のため何をされたのでしょうか。
コメントから、あまり自身が提示されたコードをちゃんと理解して書いているように思えません。