Giả sử bạn muốn chuyển đổi sang hệ thập lục phân cơ sở/radix, sau đây nên làm như lừa:
static void Main(string[] args)
{
Console.WriteLine(Base16(135.34375, 10));
Console.ReadLine();
}
private static string Base16(double number, int fractionalDigits)
{
return Base(number, fractionalDigits, new char[]{
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
'A', 'B', 'C', 'D', 'E', 'F' });
}
private static string Base(double number, int fractionalDigits, params char[] characters)
{
int radix = characters.Length;
StringBuilder sb = new StringBuilder();
// The 'whole' part of the number.
long whole = (long)Math.Floor(number);
while (whole > 1)
{
sb.Insert(0, characters[whole % radix]);
whole = whole/radix;
}
// The fractional part of the number.
double remainder = number % 1;
if (remainder > Double.Epsilon || remainder < -Double.Epsilon)
{
sb.Append('.');
double nv;
for (int i = 0; i < fractionalDigits; i++)
{
nv = remainder * radix;
if (remainder < Double.Epsilon && remainder > -Double.Epsilon)
break;
sb.Append(characters[(int)Math.Floor(nv)]);
remainder = nv % 1;
}
}
return sb.ToString();
}
Việc chuyển đổi hệ thập lục phân của 135,34375 là 87.58
.
Một lý do không có chức năng làm sẵn cho điều này là vì nó hoàn toàn vô dụng. Ai có thể (và muốn) đọc một đôi như hex? –
đồng ý với Henk. @rross: Tôi sắp chết để biết, tại sao bạn cần phải làm điều này? – tenfour
@Henk Không có gì hữu ích hơn khi biểu diễn một giá trị không nguyên trong hex so với thập phân hoặc bất kỳ cơ sở nào khác. Chúng tôi chỉ được sử dụng nhiều hơn để thập phân. –