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

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

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

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

Q&A

解決済

1回答

497閲覧

javascript parseFloat 少数足し算

kokok

総合スコア145

JavaScript

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

0グッド

0クリップ

投稿2019/05/17 08:36

javascript

1コード 2<!DOCTYPE html> 3<html lang="ja"> 4 5<head> 6<meta charset="utf-8"> 7<title>入力フォームに入力された数値を合計</title> 8</head> 9 10<body> 11 12 13<form> 14 <label for="textForm">数値1:</label> 15 <input type="text" id="textForm"> 16 17 18 19 <label for="textForm2">: 数値2:</label> 20 <input type="text" id="textForm2"> 21 22 23 <button id="button">足す</button> 24 25</form> 26 <label for="resultForm">計算結果:</label> 27 <input type="text" id="resultForm"> 28 29</body> 30 31<script> 32 33var button = document.getElementById("button"); 34 35button.addEventListener("click",function(e){ 36 e.preventDefault(); 37 38 var textForm = document.getElementById("textForm").value; 39 var textForm2 = document.getElementById("textForm2").value; 40 41 var sum = parseFloat(textForm) + parseFloat(textForm2); 42 43 44 var resultForm = document.getElementById("resultForm"); 45 resultForm.value = textForm; 46 47 48 var resultForm = document.getElementById("resultForm"); 49 resultForm.value= sum; 50 51}); 52 53</script> 54 55 56</html>

入力フォーム2つから入力された数値を足しているのですが

parseFloat を使うと 0.2 + 0.7 = 0.899999999999999 と表示されてしまいます。

0.3+ 0.5 = 0.8 などになります

なぜ、0.2 + 0.7 = 0.899999999999999 と表示されてしまうのでしょうか?

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

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

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

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

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

guest

回答1

0

ベストアンサー

なぜ、0.2 + 0.7 = 0.899999999999999 と表示されてしまうのでしょうか?

浮動小数点数の限界です。JavaScriptの数値は1以下も2進法で記録しているため、0.1すら正確に表現できません。そのため、このような誤差が出ることはよく起こります。

投稿2019/05/17 08:38

maisumakun

総合スコア145183

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

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

kokok

2019/05/17 08:42

ありがとうございます。 では、これに対する対策などはないのでしょうか?
miyabi-sun

2019/05/17 08:52

> これに対する対策などはないのでしょうか? 一番現実なのは有効数値n桁目で四捨五入です。 基本的には0.899...みたいな感じになりますので、 3桁目で四捨五入して0.899 + 1にすれば0.900になりますよね? このようにn桁まで有効というのを意識しつつ、必要に応じて可変にしてください。
kokok

2019/05/17 10:06

参考にしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問