R
1>a<-2.2000003 2>a<-sprintf('%0.1f',a) 3>a 4[1]"2.2"
となるのですが
as.numeric型で数値変換するとせっかく切り落とした数値が復活します
R
1>a<-as.numeric(a) 2>[1] 2.2000003
切り落とした数値を復活させないまま"2.2"を数値化するにはどうしたらいいでしょうか。
よろしくお願いします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答3件
0
ベストアンサー
私の環境では再現しませんが……。
R
1> a<-2.2000003 2> a<-sprintf("%0.1f", a) 3> a 4[1] "2.2" 5> as.numeric(a) 6[1] 2.2 7> sessionInfo() 8R version 3.2.0 (2015-04-16) 9Platform: x86_64-pc-linux-gnu (64-bit) 10Running under: Ubuntu 14.04.5 LTS 11 12locale: 13 [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C 14 [3] LC_TIME=ja_JP.UTF-8 LC_COLLATE=en_US.UTF-8 15 [5] LC_MONETARY=ja_JP.UTF-8 LC_MESSAGES=en_US.UTF-8 16 [7] LC_PAPER=ja_JP.UTF-8 LC_NAME=C 17 [9] LC_ADDRESS=C LC_TELEPHONE=C 18[11] LC_MEASUREMENT=ja_JP.UTF-8 LC_IDENTIFICATION=C
基本的にコンピューターは2進数に変換した形でしか実数を扱えないので、小数点以下の細かい桁まで完璧に再現できるとの前提でプログラムを書くと問題が出ることがあります。丸めた数値をどう使うつもりか存じませんが、表示だけの問題なら文字列として保持しておくのも一つの現実的な対処法でしょう。
投稿2017/12/06 03:58
総合スコア13671
0
浮動小数点数につきものの誤差の話と思います。一般によく用いられる浮動小数点数の内部表現は2進数のため、0.1を正確には表せず必ず誤差のある値でしか数値を扱えません。Rでも同様のようです。
http://www.hep.by/gnu/r-patched/r-faq/R-FAQ_82.html
「そもそも数値として2.2をRで正確に表すことはできない」というところから考えてみてください。浮動小数点数は誤差がある点を踏まえて用いるものと考えてくください。
投稿2017/12/06 03:54
総合スコア18394
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/06 05:15
2017/12/06 05:20
2017/12/06 05:26
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/12/06 04:04
2017/12/06 04:10
2017/12/06 05:11