30

Railsで10進数の小数部分を取得しようとしています。たとえば、「1.23」という数字があり、「23」を取得したいのですが、簡単すぎるかもしれませんが、どうすればよいか知っている人はいますか?

4

9 に答える 9

62

モジュロ法を使用してみてください:

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
于 2012-09-13T12:21:35.973 に答える
12

それが最も簡単な方法かどうかはわかりませんが、「。」を使用して単純に数値を分割できます。キャラクター - このように:

number = 1.23
parts = number.to_s.split(".")
result = parts.count > 1 ? parts[1].to_s : 0
于 2012-09-13T12:21:48.743 に答える
9
n = 1.23

n.modulo(1)
=> 0.22999999999999998

n - n.to_i
=> 0.22999999999999998

推奨読み取りhttp://floating-point-gui.de/

于 2012-09-13T12:21:02.353 に答える
5

適切なソリューションを決定するには、使用しているタイプを理解する必要があります。値が Float (Ruby の非整数の標準型) の場合、論理的に正しい答えは、浮動小数点エラーmod(1)により予期しない結果になる可能性があります。そもそも使用するデータ型が Float である場合は、これで問題ない可能性があります。

浮動小数点エラーが許容できない場合は、使用しないでくださいFloat! Ruby にはBigDecimal、パフォーマンスと若干冗長な構文を犠牲にしてはるかに正確な優れたクラスが付属しています。

decimal = BigDecimal.new("1.23")
decimal.frac #=> 0.23
于 2015-11-13T01:16:38.740 に答える
1
 a=1.23 #value of a will be 1.23
 a=a-a.to_i #value of a will be 0.23
于 2014-12-29T06:15:56.843 に答える
0

(num - num.to_i).absすべてを試した後...負の数でも機能するため、最良の答えだと思います。

例えば

(1.23 - 1.23.to_i).abs = 0.23

(-1.23 - -1.23.to_i).abs = 0.23

于 2016-02-25T03:46:08.227 に答える