導航:首頁 > 編程語言 > java小數進制轉換

java小數進制轉換

發布時間:2024-12-25 00:49:59

java 編程進制轉換工具

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class T extends JFrame implements ActionListener {
private JTextField input, output;
private JComboBox source, dest;
private JLabel lbl = new JLabel("轉換為");
private JButton btn = new JButton("轉換");
private String[] items = { "2", "8", "10", "16" };
private int[] radix = { 2, 8, 10, 16 };

public T() {
super("進制轉換");
this.setSize(200, 130);
this.setLayout(null);
init();
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setResizable(false);
this.setVisible(true);
}

private void init() {
input = new JTextField();// 輸入框
output = new JTextField();// 輸入框
source = new JComboBox(items);
dest = new JComboBox(items);

source.setBounds(10, 10, 50, 20);
lbl.setBounds(70, 10, 50, 20);
dest.setBounds(130, 10, 50, 20);

input.setBounds(10, 50, 100, 20);
btn.setBounds(120, 50, 60, 20);

output.setBounds(10, 80, 170, 20);

btn.addActionListener(this);

this.add(source);
this.add(dest);
this.add(lbl);
this.add(input);
this.add(btn);
this.add(output);
}

public void actionPerformed(ActionEvent e) {
int index1 = source.getSelectedIndex();
int index2 = dest.getSelectedIndex();
try {
int num = Integer.parseInt(input.getText(), radix[index1]);
output.setText(Integer.toString(num, radix[index2]));
} catch (Exception e2) {
output.setText("輸入錯誤");
}

}

public static void main(String[] args) {
new T();
}

}

㈡ java 小數 轉換二進制

提供思路:
對於 0~1之間的小數,要用二進製表示。以0.725為例,演算法如下:
0.725,將其乘以2後得到1。45,取其整數部分1為二進制小數的第一項(十分位),在將小數部分0。45乘2得0。9,取其整數部分為二進制小數的第二位(百分位)0,在將其小數部分0。9乘2,得1。8,取其整數部分為二進制小數的第三位(千分位)1,取其小數部分0。8再乘2……以此類推,直到值為0或形成循環小數則停止。

示例代碼
import java.util.*;
public class Test {
public static void main(String[] args) throws Exception {
Test t = new Test();
Integer[] result = t.toBin(0.725f);
for(int i : result)
System.out.print(i);
}

public Integer[] toBin(float f) {
if (f >= 1 || f <= 0)
return null;
List<Integer> list = new ArrayList<Integer>();
Set<Float> set = new HashSet<Float>();
int MAX = 8; // 最多8位

int bits = 0;
while (true) {
f = calc(f, set, list);
bits++;
if (f == -1 || bits >= MAX)
break;
}

return (Integer[])list.toArray(new Integer[0]);
}

private float calc(float f, Set<Float> set, List<Integer> list) {
if (f == 0 || set.contains(f))
return -1;
float t = f * 2;
if (t >= 1) {
list.add(1);
return t - 1;
} else {
list.add(0);
return t;
}
}
}

㈢ java 十進制轉二進制!

十進制數轉二進制數的演算法如下:
1. 十進制整數轉換為二進制整數

十進制整數轉換為二進制整數採用"除2取余,逆序排列"法。具體做法是:用2去除十進制整數,可以得到一個商和余數;再用2去除商,又會得到一個商和余
數,如此進行,直到商為零時為止,然後把先得到的余數作為二進制數的低位有效位,後得到的余數作為二進制數的高位有效位,依次排列起來。
2.十進制小數轉換為二進制小數

十進制小數轉換成二進制小數採用"乘2取整,順序排列"法。具體做法是:用2乘十進制小數,可以得到積,將積的整數部分取出,再用2乘餘下的小數部分,又
得到一個積,再將積的整數部分取出,如此進行,直到積中的小數部分為零,或者達到所要求的精度為止。然後把取出的整數部分按順序排列起來,先取的整數作為
二進制小數的高位有效位,後取的整數作為低位有效位。

下面就給出根據十進制數轉二進制數的演算法所寫的一段Java程序以供大家參考:

import java.math.BigDecimal;

public class Test {

public static void main(String[] args) {
Test t = new Test();
double d = 8;
String s = t.decimal2BinaryStr(d);
System.out.println("十進制數"+d+"轉成二進制數為:"+s);
}

/**
* 十進制數轉二進制數
* @param d 十進制數
* @return 十進制數轉換成二進制的字元串
*/
public String decimal2BinaryStr(double d){
String result = decimal2BinaryStr_Inte(d);
result += decimal2BinaryStr_Deci(d);
return result;
}

/**
* 十進制整數部分轉二進制數
* @param d 十進制數
* @return 十進制整數部分轉換成二進制的字元串
*/
public String decimal2BinaryStr_Inte(double d){
// return Integer.toBinaryString((int)d);
/*
* 本來利用上面的Integer.toBinaryString(int)就可以得到整數部分的二進制結果,
* 但為了展示十進制轉二進制的演算法,現選擇以下程序來進行轉換
*/
String result = "";
long inte = (long)d;
int index = 0;
while(true){
result += inte%2;
inte = inte/2;
index++;
if(index%4 == 0){
result+=" ";
}
if(inte==0){
while(index%4!=0){
result+="0";
index++;
}
break;
}
}
char[] c = result.toCharArray();
char[] cc = new char[c.length];
for(int i=c.length; i>0; i--){
cc[cc.length-i] = c[i-1];
}
return new String(cc);
}

/**
* 十進制小數部分轉二進制
* @param d 十進制數
* @return 十進制小數部分轉換成二進制小數的字元串
*/
public String decimal2BinaryStr_Deci(double d){
return decimal2BinaryStr_Deci(d, 0);
}

/**
* 十進制小數部分轉二進制
* @param d 十進制數
* @param scale 小數部分精確的位數
* @return 十進制小數部分轉換成二進制小數的字元串
*/
public String decimal2BinaryStr_Deci(double d, int scale){
double deci = sub(d,(long)d);
if(deci==0){
return "";
}
//為了防止程序因所轉換的數據轉換後的結果是一個無限循環的二進制小數,因此給其一個默認的精確度
if(scale==0){
scale = (String.valueOf(deci).length()-2)*4;
}
int index = 0;
StringBuilder inteStr = new StringBuilder();
double tempD = 0.d;
while(true){
if(deci==0 || index==scale){
while(index%4!=0){
inteStr.append("0");
index++;
}
break;
}
if(index==0){
inteStr.append(".");
}
tempD = deci*2;
inteStr.append((int)tempD);
deci = sub(tempD ,(int)tempD);
index++;
if(index%4 == 0){
inteStr.append(" ");
}
}
return inteStr.toString();
}

/**
* 提供精確的減法運算。
* @param v1 被減數
* @param v2 減數
* @return 兩個參數的差
*/
public static double sub(double v1, double v2) {
BigDecimal b1 = new BigDecimal(Double.toString(v1));
BigDecimal b2 = new BigDecimal(Double.toString(v2));
return b1.subtract(b2).doubleValue();
}
}
例如將十進制數1234.5轉成二進制數為:0100 1101 0010.1000

閱讀全文

與java小數進制轉換相關的資料

熱點內容
資料庫統計某一欄位值出現次數 瀏覽:705
學編程需要哪些方面的能力 瀏覽:896
在word2003表格中插入一行 瀏覽:606
怎麼把拍照取字的文件轉成pdf 瀏覽:838
小米穿戴app哪裡更換表盤 瀏覽:911
滿足該條件更改文件內容的代碼 瀏覽:503
xp系統怎麼卸載win10系統文件 瀏覽:709
華為手機雙系統app怎麼轉 瀏覽:317
u盤插上pc自動跳出文件夾 瀏覽:232
機密文件寫在哪裡 瀏覽:480
qq主題免費使用女孩 瀏覽:342
園林景觀網站模板 瀏覽:717
五線譜入門基礎視頻教程下載 瀏覽:598
個人網站怎麼盈利 瀏覽:618
怎麼禁止程序啟動程序運行 瀏覽:261
蘋果平板的測距儀app有什麼作用 瀏覽:229
烏雲資料庫酒店開房 瀏覽:674
查看linux用戶賬號密碼 瀏覽:76
win7系統疊加網路 瀏覽:161
少兒編程貓的禮包兌換碼是什麼 瀏覽:274

友情鏈接