Rubyで有効数字を指定する方法

Rails・Webシステム開発
Anja🤗#helpinghands #solidarity#stays healthy🙏によるPixabayからの画像
スポンサーリンク

832.109は830

1.789は1.8

0.0141は0.014

つまり有効数字2桁をとりたいとき、ありませんか?

round使えば四捨五入できますが、指定できるのは「小数点以下第何位か?」ですので、上位3桁目を四捨五入して有効数字2桁で返すには他の方法が必要でした。



Rubyで有効数字を指定する方法:結論

ありそうなので車輪の再発明な気もしますが、見つけきらなかったのでメソッドで作成しました。

def significant_digits(num, digits)
  return num if num.blank? || num.zero?

  b = Math.log10(num.abs).floor
  a = num.fdiv(10**b)
  a.round(digits.to_i - 1)*(10**b)
end

numに丸めたい数字、digitsに有効数字何桁にしたいかを指定します。digitsにゼロ以下を入れると有効数字1桁になります。

>> significant_digits(832.109, 2)
830
>> significant_digits(1.789, 2)
1.8
>> significant_digits(0.014197, 2)
0.014

BigDecimalを使う方が正確な値が出るようです。誤差が問題になるようなら、リファクタリングしましょう。あと、flootを返すのではなく[a, b]を返すと良い場面もあるかもしれませんね。

はるすと
はるすと

最後まで読んでくださってありがとうございました!

この記事を書いた人
こもれびエンジニア

自然と自由を愛するエンジニア。2021年1月に、大手製造業設計からプログラマ(Rails, AWS)へ転職。動物や自然との触れ合いや、汗を流すのが好き。

/HSP(繊細さん)/18デリケートな象/ストレングスファインダー(1分析思考/2親密性/3学習欲/4調和性/5収集心)、テニス、合気道、登山、あいだみつを、ジブリ、ワンピース、ドラゴンボール、AWS、Ruby on Rails、アイミング

twitterをフォローして、記事にならないちょっとした豆知識もチェック!
Rails・Webシステム開発
スポンサーリンク
SNSでシェア/コメントして、自分のアウトプット/発信力を高めるのにお使いください。 ↓ 各ページへジャンプ ↓
twitterをフォローして、記事にならないちょっとした豆知識もチェック!
スポンサーリンク
「そんなか」サイト

コメント

タイトルとURLをコピーしました