如何将十进制小数转换为十六进制小数? [英] How to convert decimal fractions to hexadecimal fractions?

查看:1513
本文介绍了如何将十进制小数转换为十六进制小数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我在想,你如何将十进制小数转换成十六进制小数?
什么是转换的一些方法,并有捷径?

解决方案

您可以使用此算法:


  1. 取小数部分(即整数部分等于零)
  2. 乘以
  3. 将整数部分转换为十六进制并放下

  4. 转至步骤1

  5. ol>

    例如,让我们找出 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); ...

    所以(十六进制)= 3.243F6A ...

    可能的(C#)实现

      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


    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:

    1. Take a fractional part of the number (i.e. integer part equals to zero)
    2. Multiply by 16
    3. Convert integer part to hexadecimal and put it down
    4. Go to step 1

    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

      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); ...
    

    So pi (hexadecimal) = 3.243F6A...

    Possible (C#) implementation

    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();
    }
    

    Test

       Console.Write(ToHex(Math.PI)); // <- returns "3.243F6A8885A3"
    

    这篇关于如何将十进制小数转换为十六进制小数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆