web-dev-qa-db-ja.com

数値を切り捨てる

私はこのようなnumericを持っています:

_a <- -1.542045
_

そして、それらを小数点以下2桁に切り下げ(またはabsを切り上げ)たいと思います。 signif(a,3)はそれを切り捨てて結果として1.54を返しますが、この例の場合、必要な結果は_-1.55_です。

何か案が?

5
dan

あなたはfloor(a * 100) / 100を探していると思います。

クイックテスト

_a <- c(-1.542045, 1.542045)
floor(a * 100) / 100
# [1] -1.55  1.54
_

7時間前に質問を変更しました。次に、私の答えはあなたが望んでいることを正確に行っていません(私は「切り捨て」によって常に_-Inf_に丸めたいと思っているので)。しかし、私はこれを私の回答の最初のバージョンで議論しました。次に、関連するものをここにコピーします。

  • sign(a) * ceiling(abs(a) * 100) / 100を使用すると、正の値の場合はInfに、負の値の場合は_-Inf_にデータを丸めることができます。
  • sign(a) * floor(abs(a) * 100) / 100では、正と負の両方の値を0に丸めます。

簡単なテスト

_a <- c(-1.542045, 1.542045)

sign(a) * ceiling(abs(a) * 100) / 100
# [1] -1.55  1.55

sign(a) * floor(abs(a) * 100) / 100
# [1] -1.54  1.54
_
16
李哲源

あなたは問題を誤解しています。値が-1.542045の場合、常にそうです。

これでprint小数点以下2桁にしたり、小数点以下2桁の文字を取得したりできます。

> print(a, digits=3)
[1] -1.54
> format(a, digits=3)
[1] "-1.54"
> 

本当に新しいものを作成したいrepresentationできること:

> b <- trunc(a*1e2)*1e-2
> b
[1] -1.54
> 

好ましい方法は

> b <- round(a, digits=2)
> b
[1] -1.54
> 
2

ceiling()abs()、およびsign()の組み合わせを使用して、その符号に関係なく、数値のabsを切り上げることができます。 2つの10進数でのこのような丸めは、次のようにして取得できます。

ceiling(abs(a)*100)/100*sign(a)

例:

a <- c(-1.542045, 1.542045)
ceiling(abs(a)*100)/100*sign(a)
#[1] -1.55  1.55
1
RHertel