Railsで10進数の小数部分を取得しようとしています。たとえば、「1.23」という数字があり、「23」を取得したいのですが、簡単すぎるかもしれませんが、どうすればよいか知っている人はいますか?
9 に答える
モジュロ法を使用してみてください:
1.23.modulo(1) => 0.23
詳細はこちら: http://www.ruby-doc.org/core-1.9.3/Numeric.html#method-i-modulo
または、float を整数に変換し、元の float 値から減算することもできます。
1.23 - 1.23.to_i => 0.23
それが最も簡単な方法かどうかはわかりませんが、「。」を使用して単純に数値を分割できます。キャラクター - このように:
number = 1.23
parts = number.to_s.split(".")
result = parts.count > 1 ? parts[1].to_s : 0
n = 1.23
n.modulo(1)
=> 0.22999999999999998
n - n.to_i
=> 0.22999999999999998
適切なソリューションを決定するには、使用しているタイプを理解する必要があります。値が Float (Ruby の非整数の標準型) の場合、論理的に正しい答えは、浮動小数点エラーmod(1)
により予期しない結果になる可能性があります。そもそも使用するデータ型が Float である場合は、これで問題ない可能性があります。
浮動小数点エラーが許容できない場合は、使用しないでくださいFloat
! Ruby にはBigDecimal
、パフォーマンスと若干冗長な構文を犠牲にしてはるかに正確な優れたクラスが付属しています。
decimal = BigDecimal.new("1.23")
decimal.frac #=> 0.23
a=1.23 #value of a will be 1.23
a=a-a.to_i #value of a will be 0.23
(num - num.to_i).abs
すべてを試した後...負の数でも機能するため、最良の答えだと思います。
例えば
(1.23 - 1.23.to_i).abs = 0.23
(-1.23 - -1.23.to_i).abs = 0.23