に浮遊する浮動小数点の16進数に変換し、私は、浮動小数点数を変換するコマンド1.012.toString(16)
を使って、Javascriptを使用して16進数の1.012
を言うと、今のRubyを使用して1.012
するためにJavaScript 1.03126e978d4fe
の出力を反転させるために何ができるのか?はルビー
要するに、Rubyで16進数としてエンコードされた浮動小数点を逆転する最も簡単な方法は何ですか?
ありがとうございました。
に浮遊する浮動小数点の16進数に変換し、私は、浮動小数点数を変換するコマンド1.012.toString(16)
を使って、Javascriptを使用して16進数の1.012
を言うと、今のRubyを使用して1.012
するためにJavaScript 1.03126e978d4fe
の出力を反転させるために何ができるのか?はルビー
要するに、Rubyで16進数としてエンコードされた浮動小数点を逆転する最も簡単な方法は何ですか?
ありがとうございました。
この出力は、最初は本当に奇妙に見えましたが、実際にはベースの10個のフロートと一致しています。 1.012
は、私たちが毎日10進数字システムを使用しているからといって、普通に見えます。
def string_to_float(string, base = 10)
string.delete('.').to_i(base).to_f/base**(string.reverse.index('.') || 0)
end
string_to_float('1.03126e978d4fe', 16)
#=> 1.012
string_to_float('1c.8', 16)
#=> 28.5
string_to_float('3.243f6a8885a3', 16)
#=> 3.141592653589793
string_to_float('20.0', 16)
#=> 32.0
string_to_float('20.', 16)
#=> 32.0
string_to_float('20', 16)
#=> 32.0
string_to_float('3.14159', 10)
#=> 3.14159
string_to_float('11.001001000011111101101010100010001000010110100011', 2)
#=> 3.141592653589793
あなただけに必要な場合:私はそれを正しく理解していれば
は、出力は、分子は(「」なし)全体進数であると分母が16**(length of "decimal" part)
であると合理的とみなすことができます進浮動小数点数を変換し、あなたがbase
引数を削除することができます
def hex_string_to_float(hex)
hex.delete('.').to_i(16).to_f/16**(hex.reverse.index('.') || 0)
end
これは私が今までに見た変わった変換です。
i, m = "1.03126e978d4fe".split('.')
Integer("0x#{i}") + 1.0 * Integer("0x#{m}")/Integer("0x1#{'0' * m.length}")
#⇒ 1.012
'.to_i(16)'ではなく、文字列のハッカーで 'Integer'となるのはなぜですか? – tadman
ああ。私は質問を理解していない、私は答えを理解していないが、明らかに、あなたはそれを解決した。 –
'i.to_i'は' i.to_i(16) 'でなければなりません。 'Float(32)'は '20.0'としてエンコードされます。 –
「進」と「フロート」を何のビジネスは同じ文にあるんです。その出力は完全に嫌なことです。 – tadman
@tadman:私は最初も本当に困惑していました。しかし、それは意味をなさないし、私たちのベースのフロートと一致しています。 –