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

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

ただいまの
回答率

90.34%

  • JavaScript

    17529questions

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

javascript 丸め誤差 について

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,128

shinichi0326

score 37

どの言語においても、小数の丸め誤差は問題になるとは思いますが、javascriptの場合、ネットを調べてみてもjavaにおけるBigDecimalの様な明確な機能が見つかりません。toFixed なども試してみましたが、どうも上手くいきません。
大変抽象的な質問ですが、どなたかご教示下さい。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

checkベストアンサー

+1

以前、電卓を作った時に浮動小数点演算で誤差が出ないように作りました。

0.6 * 3;                     // 1.7999999999999998
evalCalculation('0.6 * 3');  // 1.8

Re: shinichi0326 さん

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/24 13:51

    初心者なので、evalCalculationを外部スクリプトとして設定するところが、解らなかったのでevalCalculationのソースを私のソースの関数として定義したところ上手く動作しました。
    今の私には、evalCalculationの様な関数は全く作れませんが、勉強していつかは作れるようになりたいです。kei344さんとどちらをベストアンサーにしようか迷いましたが、ソースコードを載せて頂いたことで、今回の問題が解決しましたので、think49さんをベストアンサーに選ばせて頂きます。
    また、何か解らないことがありましたら、ご教示下さい。

    キャンセル

  • 2017/01/24 15:27

    > evalCalculationのソースを私のソースの関数として定義したところ上手く動作しました。
    念のため、指摘しておきますが、ライセンス表記となるコメントも含めてコピー&ペースとして下さい。MITライセンスです。
    http://wisdommingle.com/mit-license/

    キャンセル

  • 2017/01/24 17:28

    了解致しました。MITライセンスも全く知りませんでした。著作権は大事みたいですね!
    色々勉強になりました。ありがとうございます。

    キャンセル

0

使用していないので詳しくはわかりませんが、ライブラリが何種類かあります。

【GitHub - MikeMcl/decimal.js: An arbitrary-precision Decimal type for JavaScript】
https://github.com/MikeMcl/decimal.js/

【GitHub - MikeMcl/bignumber.js: A JavaScript library for arbitrary-precision decimal and non-decimal arithmetic】
https://github.com/MikeMcl/bignumber.js/

【GitHub - MikeMcl/big.js: A small, fast JavaScript library for arbitrary-precision decimal arithmetic.】
https://github.com/MikeMcl/big.js/

【GitHub - dtrebbien/BigDecimal.js: Arbitrary-precision decimals library for JavaScript】
https://github.com/dtrebbien/BigDecimal.js/

【bignumber.js vs. big.js vs. decimal.js · jsPerf】
https://jsperf.com/bignumber-js-vs-big-js-vs-decimal-js/29

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/01/23 13:46

    回答を頂いてから、decimal.jsをダウンロードし解凍してみましたが、ライブラリの使い方(インポートの方法)が分かりません。恥ずかしいのですが、そこのところもお教え頂けますでしょうか。

    キャンセル

  • 2017/01/24 01:44

    「インポートの方法」ということは、node.jsとかサーバサイドで使用されるのでしょうか。その場合リンク先にあるように
    var Decimal = require('decimal.js');
    とするようです。

    HTMLで使うには使用するより前の箇所で下記のように読み込めば使えます。
    <script src='path/to/decimal.js'></script>

    計算式の使用例は下記記事とか参考になるでしょうか。

    【雑多なめも JavaScriptと小数点の演算誤差と対策】
    http://laxmi759.blog.fc2.com/blog-entry-92.html

    キャンセル

  • 2017/01/24 11:54

    度々すいませんが、某サイトでプログラムの問題を解いている際に起きた現象です。ブラウザでプログラミング(サイト名解っちゃいますかね?)というサイトで、
    var Decimal = require('decimal.js');
    として、実行すると
    module.js:471
    throw err;
    ^

    Error: Cannot find module 'decimal.js'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at Object.<anonymous> (/workspace/Main.js:1:77)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)
    at Function.Module._load (module.js:438:3)
    とエラーになってしまうので、
    自分なりにネットでいろいろ調べまして、
    npm install -g npm-install-missing
    npm-install-missing
    を実行すればよいみたいな記事を見つけたのですが、どこで実行すればよいのか、今自分がサーバーサイドにいるのかHTMLサイドにいるのかも解りません。何から何まで、おんぶにだっこで申し訳ありませんが、ご教示頂けませんでしょうか。

    キャンセル

  • 2017/01/24 11:59

    > 某サイトでプログラムの問題を解いている際に起きた現象
    そこの仕様がわかりません。decimal.js の中身をコードの先頭に入れれば使えるとは思います。

    キャンセル

  • 2017/01/24 13:56

    度々申し訳ございません。think49さんのevalCalculationを私のソースの関数としてコピーさせて頂いたところ、うまく動作しました。kei344さんには申し訳ありませんが、今回はthink49さんをベストアンサーに選ばせて頂きました。javascript初心者なもので、kei344さんをイライラさせてしまったと思いますが、お許し下さい。何度も返信ありがとうございました。

    キャンセル

同じタグがついた質問を見る

  • JavaScript

    17529questions

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