私は考えていましたが、小数部分を16進小数にどのように変換しますか? 変換にはいくつかの方法があり、ショートカットはありますか?小数部分を16進小数に変換するにはどうすればよいですか?
あなたはこのアルゴリズムを使用することができます
11
A
答えて
19
:16進数に
- をダウン
- ゴーさんは見つける聞かせて、例えば1
をステップPI = 3.141592653589793 ...
整数部分の16進表現は明らかである - を0x3。小数部分(0.141592653589793)用として、私たちは
0.14159265358979 * 16 = 2.26548245743664; int part 2 (0x2); frac 0.26548245743664
0.26548245743664 * 16 = 4.24771931898624; int part 4 (0x4); frac 0.24771931898624
0.24771931898624 * 16 = 3.96350910377984; int part 3 (0x3); frac 0.96350910377984
0.96350910377984 * 16 = 15.41614566047744; int part 15 (0xF); frac 0.41614566047744
0.41614566047744 * 16 = 6.65833056763904; int part 6 (0x6); frac 0.65833056763904
0.65833056763904 * 16 = 10.53328908222464; int part 10 (0xA); ...
のでパイ(16進数)= 3.243F6A ...
可能性(C#)の実装
public static String ToHex(Double value) {
StringBuilder Sb = new StringBuilder();
if (value < 0) {
Sb.Append('-');
value = -value;
}
// I'm sure you know how to convert decimal integer to its hexadecimal representation
BigInteger bi = (BigInteger) value;
Sb.Append(bi.ToString("X"));
value = value - (Double)bi;
// We have integer value in fact (e.g. 5.0)
if (value == 0)
return Sb.ToString();
Sb.Append('.');
// Double is 8 byte and so has at most 16 hexadecimal values
for (int i = 0; i < 16; ++i) {
value = value * 16;
int digit = (int) value;
Sb.Append(digit.ToString("X"));
value = value - digit;
if (value == 0)
break;
}
return Sb.ToString();
}
テスト
を持っていますConsole.Write(ToHex(Math.PI)); // <- returns "3.243F6A8885A3"
0
入力数値に16進数の整数を掛けて小数部分を得ることができます。その後、通常の整数から16進への変換を使用できます。たとえば、(ヘキサ)小数点の後に6文字を取得するには、小数部に0x1000000を掛けます。
これを行うJavaコードを次に示します。
String toHexFraction(double x, int digits) {
// Get fractional part.
if (x < 0.0)
x = 0.0 - x;
x = x % 1.0;
// Shift left by n digits
long multiplier = (1L << (digits * 4));
long fraction = (long)(x * multiplier);
// Convert integer to hex string.
// String should have at least n digits; prefix with zeros if not.
String hex = Long.toHexString(fraction);
String padding = "000000000000000";
hex = padding.substring(0, digits - hex.length()) + hex;
return hex;
}
String toHexInteger(double x) {
long whole = (long) x;
String prefix;
if (whole < 0) {
// Long.toHexString treats the number as an unsigned integer.
whole = 0 - whole;
prefix = "-";
} else {
prefix = "";
}
return Long.toHexString(whole);
}
String toHex (double x, int digits) {
return toHexInteger(x) + "." + toHexFraction(x, digits);
}
数字の桁数は、ダブルで表すことのできる最大の整数で制限されます。
これは他の四角形のベースにも有効です(例:オクタル変更の場合はdigits * 4
〜digits * 3
、Long.toOctalString
を使用します。
関連する問題
- 1. バイナリ浮動小数点を10進小数に変換するにはどうすればよいですか?
- 2. 16進文字列を16進数値に変換するにはどうすればよいですか?
- 3. PowerShellで16進数を10進数に変換するにはどうすればよいですか?
- 4. 浮動小数点値を16進数に変換する
- 5. 小数点を16進数に変換するR
- 6. 小数点を16進数に変換するR
- 7. 16進数を10進数に変換するにはどうすればよいですか?
- 8. Javaで小数部分をバイナリに変換するにはどうすればよいですか?
- 9. 16進ファイルをPHPで浮動小数点に変換する
- 10. C#で16進数をIEEE 754浮動小数点に変換
- 11. 文字列を16進数で16進数に変換する
- 12. javascriptで数字を小さな部分に分割するにはどうすればよいですか?
- 13. 16進数を小数点(緯度/経度)に変換しますか?
- 14. Golangでintを16進数に変換するにはどうすればよいですか?
- 15. C++数値の小数部分を整数に変換する
- 16. 16進数をIEEE浮動小数点Pythonに変換する方法
- 17. 16進形式を浮動小数点数に変換するとR
- 18. ヘックスストリングを16進数に変換するにはどうすればよいですか?
- 19. 文字列の16進値を数値に変換するにはどうすればよいですか?
- 20. SmallBasic:getpixel関数の16進値をrgb値に変換するにはどうすればよいですか?
- 21. 大きな16進数のファイルをバイナリファイルに変換するにはどうすればよいですか?
- 22. 整数を4桁の16進文字列に変換するにはどうすればよいですか?
- 23. スウィフト3では小数点以下の八進数を16進数に変換し、逆も同様です。
- 24. 16進数を2進数のiphoneに変換するには
- 25. 浮動小数点数をJavaScriptの32ビット16進数文字列に変換
- 26. 16進ビットパターン(文字列として)をNode.jsで浮動小数点に変換するにはどうすればいいですか?
- 27. 10進整数を16進数に変換できますか?
- 28. 混乱C++で16進数を2進数に変換する
- 29. スウィフトで16進数を10進数に変換する
- 30. 16進数をasciiに変換する
特定の言語ですか? – joseramonc
どういう意味ですか? @JoseRamonCamacho? .2002(base10)を。?(base16) – Dusteh
にjava、ruby、pythonのように変換しますか? – joseramonc