程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> J2ME float 處理

J2ME float 處理

編輯:J2ME

CLDC1.0中不支撐float,自己處理了一下: 

public static int Bytes4ToInt(byte abyte0[])
{
    return (0xff & abyte0[0]) << 24 | (0xff & abyte0[1]) << 16 |
    (0xff & abyte0[2]) << 8 | 0xff & abyte0[3];
}

public static int[][] intBitsToFloatII(int bits,int flag)
{
    long time = System.currentTimeMillis();
    // 符號位一位
    int sign = bits >>> 31;
    System.out.println("符號:" + sign);

    // 指數八位 偏移:7FH
    byte index = (byte)((byte)((bits >>> 23) & 0xFF) - 0x7F);

    // 尾數23尾 加一位固定位
    int tail = (bits & 0x007FFFFF) | 0x00800000;
    tail <<= index;

    int[][] result = new int[1][1];
    result[0][0] = tail >>> 23;
    System.out.println("整數部分:" + result[0][0]);

    // 小數23位
    int decimal = tail & 0x007FFFFF;
    long tmp = decimal * 1000;
    tmp = tmp >>> 23;
    System.out.println("小數部分[放大1000]:" + tmp);  

    result[0][0] = (int)tmp;

    System.out.println("小數部分:" + tmp);

    System.out.println("系統函數盤算成果:" + Float.intBitsToFloat(bits));
    System.out.println("耗時:" + (System.currentTimeMillis() - time) + "ms");
    return result;
}

/**
 * 整型位字節轉float
 *
 * @param bits
 *            int 整型字節數據
 * @param flag
 *            int 精度:0:2位小數;1:3位小數
 * @return int[][] [整數][小數]
 */
public static int[][] intBitsToFloat(int bits,int flag)
{
    long time = System.currentTimeMillis();
    // 符號位一位
    int sign = bits >>> 31;
    System.out.println("符號:" + sign);

    // 指數八位 偏移:7FH
    byte index = (byte)((byte)((bits >>> 23) & 0xFF) - 0x7F);

    // 尾數23尾 加一位固定位
    int tail = (bits & 0x007FFFFF) | 0x00800000;
    tail <<= index;

    int[][] result = new int[1][1];

result[0][0] = tail >>> 23;
    System.out.println("整數部分:" + result[0][0]);

    // 小數23位
    int decimal = tail & 0x007FFFFF;
    decimal = (decimal * 100) >>> 23;
    int decRes = decimal;
    int tmp;
// if (flag == 0)//精度:兩位小數
// {
// decRes /= 100;
// tmp = decRes % 100;
// if (tmp >= 50)
// {
// decRes++;
// }
// }
// else
// {
// decRes /= 10;
// tmp = decRes % 10;
// if (tmp >= 500)
// {
// decRes++;
// }
// }
    result[0][0] = decRes;

    System.out.println("小數部分:" + decRes);

    System.out.println("系統函數盤算成果:" + Float.intBitsToFloat(bits));
    System.out.println("耗時:" + (System.currentTimeMillis() - time) + "ms");
    return result;
}

////////////////////////////////

調用:

              byte[] tt = new byte[4];
              tt[0] = bb[17];
              tt[1] = bb[16];
              tt[2] = bb[15];
              tt[3] = bb[14];
              for (int i = 0; i < tt.length; i++)
              {
//                  System.out.println(this.b2h(tt[i]));
              }

              int ff = Bytes4ToInt(tt);
              this.intBitsToFloat(ff,0);

//留心網絡字節次序

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved