如何将十进制小数转换为十六进制小数? [英] How to convert decimal fractions to hexadecimal fractions?
问题描述
什么是转换的一些方法,并有捷径?
您可以使用此算法:
- 取小数部分(即整数部分等于零)
- 乘以
- 将整数部分转换为十六进制并放下
- 转至步骤1
ol> - Take a fractional part of the number (i.e. integer part equals to zero)
- Multiply by 16
- Convert integer part to hexadecimal and put it down
- Go to step 1
例如,让我们找出 pi = 3.141592653589793 的十六进制表示...
整数部分很明显 - 0x3 ;至于小数部分( 0.141592653589793 ),我们有
0.14159265358979 * 16 = 2.26548245743664; int part 2(0x2);压裂0.26548245743664
0.26548245743664 * 16 = 4.24771931898624; int part 4(0x4);压裂0.24771931898624
0.24771931898624 * 16 = 3.96350910377984; int part 3(0x3);压裂0.96350910377984
0.96350910377984 * 16 = 15.41614566047744; int part 15(0xF);压裂0.41614566047744
0.41614566047744 * 16 = 6.65833056763904; int part 6(0x6);压裂0.65833056763904
0.65833056763904 * 16 = 10.53328908222464; int part 10(0xA); ...
所以 可能的(C#)实现 测试 So I was thinking, how do you convert a decimal fraction into a hexadecimal fraction?
What are some methods for converting and are there short cuts? You can use this algorithm: For instance, let's find out hexadecimal representation for pi = 3.141592653589793... integer part is evident - 0x3; as for fractional part (0.141592653589793) we have So pi (hexadecimal) = 3.243F6A... Possible (C#) implementation Test
这篇关于如何将十进制小数转换为十六进制小数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
public static String ToHex值){
StringBuilder Sb = new StringBuilder();
if(value <0){
Sb.Append(' - ');
value = -value;
}
//我确定您知道如何将十进制整数转换为其十六进制表示形式
BigInteger bi =(BigInteger)value;
Sb.Append(bi.ToString(X));
value = value - (Double)bi;
//我们实际上有整数值(例如5.0)
if(value == 0)
return Sb.ToString();
Sb.Append('。');
// Double是8个字节,所以最多有16个十六进制值
(int i = 0; i <16; ++ i){
value = value * 16;
int digit =(int)value;
Sb.Append(digit.ToString(X));
值=值 - 数字;
if(value == 0)
break;
}
return Sb.ToString();
}
Console.Write(ToHex(Math.PI)); //< - returns3.243F6A8885A3
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); ...
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"