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

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

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

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

Q&A

解決済

5回答

6197閲覧

小数点第○位以下切り捨て

lasus

総合スコア10

JavaScript

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

0グッド

1クリップ

投稿2016/05/09 06:28

###前提・実現したいこと
円周率の小数点第5位の切り捨て

###発生している問題・エラーメッセージ
第4位までの切り捨てはうまくいくが、5位以降から上手くいかない
3.14159と返してもらいたいのだが、実際には3.1415900000000003と返ってくる

###該当のソースコード
言語:JavaScript
ソースコード:
console.log(Math.floor(Math.pow(10,5)*Math.PI)*Math.pow(10,-5));

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

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

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

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

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

guest

回答5

0

JavaScript

1console.log(Math.floor(Math.pow(10,5)*Math.PI)/100000);

このようにすると誤差がなくなります。
これは、JavaScriptを始め多くの言語に含まれている小数点演算の誤算が原因です。
詳しくは「浮動小数 演算 誤差」等で検索すると情報を得られると思います。たとえば、以下のサイトが参考になると思います。

ご参考になれば。

投稿2016/05/09 06:58

tkanda

総合スコア2425

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

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

0

小手先対応。
小数点以下第5位ならいいけど、第30位とかはたぶん無理。

JavaScript

1console.log(Math.floor(Math.PI * 100000) / 100000);

投稿2016/05/09 06:58

ttyp03

総合スコア16998

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

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

0

ベストアンサー

こちらのやり方ではどうでしょうか??

(『JavaScriptで小数を四捨五入、切り捨て、切り上げする方法』より)

// 小数点n位までを残す関数 // number=対象の数値 // n=残したい小数点以下の桁数 function floatFormat( number, n ) { var _pow = Math.pow( 10 , n ) ; return Math.round( number * _pow ) / _pow ; } // 少数点以下4桁まで残して四捨五入 ( → 1.6667 ) var result = floatFormat( 1.66666666, 4 ) ;

投稿2016/05/09 06:58

編集2016/05/09 06:59
kaputaros

総合スコア1844

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

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

lasus

2016/05/09 07:16

みなさん回答ありがとうございました。 *Math.pow(10,-n)はやめて/Math.pow(10,n)という風に普通に割ったらうまくいきました。
guest

0

少数の計算ってのは仕組み上どうしても誤差が発生してしまうものです。
回避策の一つとして

1.整数化して計算
2.1の結果をいったん文字列化
3.2の結果に対して末尾から小数部の桁数合計にあたる位置に「.」を挿入
4.3の結果をparseFloatなどで数値化

などとする技があります。

javascript

1parseFloat(Math.floor(Math.pow(10,5)*Math.PI).toString().replace(/^(\d)/, '$1\.')) 2// 3.14159

などとすればfloat値として値を取得できますね。

投稿2016/05/09 06:55

tkturbo

総合スコア5572

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

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

0

bignumber.jsってのが使える?

参考:bignumber.js - JavaScriptでの浮動小数点の計算 - たけぞう瀕死ブログ
http://takezoe.hatenablog.com/entry/20140129/p1

投稿2016/05/09 06:38

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問