Rubyは、フロートを特定の10進数の有効数字まで上下に丸めます

jsmartt

私はRuby2.3.​​1を使用していますが、これがができるようにしたいことです。

1.33333333.ceil(2) -> 1.34
1.33333333.floor(3) -> 1.333

このFloat#roundメソッドでは丸めることができますが、#ceiland#floorメソッド同様に、切り上げるか切り下げるかを指定できる必要がありますが、保持する小数点以下の桁数を指定するパラメーターを使用します。

jsmartt

ではルビー2.4+Float#floatおよびFloat#ceil方法が取るndigits引数:

1.33333333.ceil(2) -> 1.34
1.33333333.floor(3) -> 1.333

ただし、これらのSTDlibメソッドでこの動作を確認してください。

# In Ruby 2.4.2:
0.07.ceil(2) -> 0.08
1.1.ceil(2) -> 1.11

私の本ではOKではありません。

古いバージョンのRubyの場合、またはSTB libが提供するよりも良い結果を得たい場合は、独自のメソッドを作成する必要があります。そこにはいくつかの異なるブログ投稿があり、それらが一貫して正しくない理由を後で説明しますが、毎回正しく機能する必要があるいくつかの方法を次に示します。

require 'bigdecimal'

class Float
  def ceil2(exp = 0)
    BigDecimal(self.to_s).ceil(exp).to_f
  end

  def floor2(exp = 0)
    BigDecimal(self.to_s).floor(exp).to_f
  end
end

以下が正しくない理由詳細については、次を参照してください。

def ceil_to(x)
  (self * 10**x).ceil.to_f / 10**x
end

def floor_to(x)
  (self * 10**x).floor.to_f / 10**x
end

# These methods also produce bad results for the examples shown above
0.07.ceil(2) -> 0.08
1.1.ceil(2) -> 1.11

何が起こっているのかについては詳しく説明しませんが(ここまたはここで確認できます)、浮動小数点演算は煩雑になる可能性があり、丸め誤差が発生します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

オーバーフローセーフな方法でN個の有効な10進数でdoubleを丸めます

分類Dev

BASH / bc / printfを使用して、フロートを最初の有効数字に丸めることはできますか?

分類Dev

10進数をゼロではない最初の小数点以下の桁数に丸めます

分類Dev

10進数をゼロではない最初の小数点以下の桁数に丸めます

分類Dev

エラーを有効数字1桁に丸め、エラーの桁数に応じて値を丸めます

分類Dev

10進数の.99を丸めます

分類Dev

NSNumberを特定の有効桁数に丸めます

分類Dev

Javaで10進数の値の後にceilまたは丸め

分類Dev

最初の列から始まるPandasDataFrameへの10進数(丸めではない)の後に特定の桁数を選択します-Python

分類Dev

Rubyで2.2ではなく2.20を10進数の2.2034に丸める方法

分類Dev

Rubyの最も近い四半期にフロートを丸めます

分類Dev

Rubyで小数を最初の有効数字に丸める方法

分類Dev

フロートを次の奇数の整数に丸めます

分類Dev

最大5桁の合計を使用してdouble値をフォーマットし、必要に応じて10進数を丸めます

分類Dev

有効数字を含むSIプレフィックスですが、d3.jsの末尾の10進ゼロをトリミングしています

分類Dev

数値を最初の3桁に丸めます(数字で始まります!= 0)

分類Dev

Rで特定の10進数に丸める方法

分類Dev

数字を丸め、隣接する数字と区別するのに十分な有効数字を保持します

分類Dev

RDLCで10進数/丸め数値をフォーマットする方法

分類Dev

ToString()でフォーマットする場合の10進数とdoubleの丸めの差

分類Dev

倍数ではない特定の値にシリーズを丸めますか?

分類Dev

10進数は自動的に丸められます

分類Dev

10 進数値を丸め、PHP の値から 0. または 0.0 を削除します。

分類Dev

Rは、正の実数xとyの間の積を0と1の間で効率的に丸めます。

分類Dev

SQLの10進数をゼロに丸めてから合計する

分類Dev

SI単位で数値を3つの有効数字にフォーマットします

分類Dev

なぜJavaは私のフロート計算を丸めていますか?

分類Dev

Spark:データセットの10進数に丸める

分類Dev

10進数を最小の整数に丸める方法は?

Related 関連記事

  1. 1

    オーバーフローセーフな方法でN個の有効な10進数でdoubleを丸めます

  2. 2

    BASH / bc / printfを使用して、フロートを最初の有効数字に丸めることはできますか?

  3. 3

    10進数をゼロではない最初の小数点以下の桁数に丸めます

  4. 4

    10進数をゼロではない最初の小数点以下の桁数に丸めます

  5. 5

    エラーを有効数字1桁に丸め、エラーの桁数に応じて値を丸めます

  6. 6

    10進数の.99を丸めます

  7. 7

    NSNumberを特定の有効桁数に丸めます

  8. 8

    Javaで10進数の値の後にceilまたは丸め

  9. 9

    最初の列から始まるPandasDataFrameへの10進数(丸めではない)の後に特定の桁数を選択します-Python

  10. 10

    Rubyで2.2ではなく2.20を10進数の2.2034に丸める方法

  11. 11

    Rubyの最も近い四半期にフロートを丸めます

  12. 12

    Rubyで小数を最初の有効数字に丸める方法

  13. 13

    フロートを次の奇数の整数に丸めます

  14. 14

    最大5桁の合計を使用してdouble値をフォーマットし、必要に応じて10進数を丸めます

  15. 15

    有効数字を含むSIプレフィックスですが、d3.jsの末尾の10進ゼロをトリミングしています

  16. 16

    数値を最初の3桁に丸めます(数字で始まります!= 0)

  17. 17

    Rで特定の10進数に丸める方法

  18. 18

    数字を丸め、隣接する数字と区別するのに十分な有効数字を保持します

  19. 19

    RDLCで10進数/丸め数値をフォーマットする方法

  20. 20

    ToString()でフォーマットする場合の10進数とdoubleの丸めの差

  21. 21

    倍数ではない特定の値にシリーズを丸めますか?

  22. 22

    10進数は自動的に丸められます

  23. 23

    10 進数値を丸め、PHP の値から 0. または 0.0 を削除します。

  24. 24

    Rは、正の実数xとyの間の積を0と1の間で効率的に丸めます。

  25. 25

    SQLの10進数をゼロに丸めてから合計する

  26. 26

    SI単位で数値を3つの有効数字にフォーマットします

  27. 27

    なぜJavaは私のフロート計算を丸めていますか?

  28. 28

    Spark:データセットの10進数に丸める

  29. 29

    10進数を最小の整数に丸める方法は?

ホットタグ

アーカイブ