转一个二进制和十进制之间的转换程序

来源:互联网 发布:谷歌seo插件 编辑:程序博客网 时间:2024/05/17 03:43
package sxpi.demo;import java.awt.Container;import java.awt.FlowLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.util.StringTokenizer;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;public class BintoDec {public static void main(String[] args) {SimpleFrame frame = new SimpleFrame();frame.setLocation(200, 250);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setVisible(true);frame.setTitle("2to10&10to2");// BtoD();}}class SimpleFrame extends JFrame {public SimpleFrame() {setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT);JPanel totalpanel = new JPanel();totalpanel.setLayout(new GridLayout(4, 1));JPanel textpanel1 = new JPanel();JPanel textpanel2 = new JPanel();JPanel buttonpanel = new JPanel();JPanel settingpanel = new JPanel();settingpanel.setLayout(new GridLayout(1, 1));textpanel1.setLayout(new GridLayout(2, 1));textpanel2.setLayout(new GridLayout(2, 1));buttonpanel.setLayout(new FlowLayout());// 按钮JButton jb1 = new JButton("2to10");JButton jb2 = new JButton("10to2");// 标签JLabel jl1 = new JLabel("输入:");JLabel jl2 = new JLabel("输出:");JLabel jl3 = new JLabel("设置输出小数位数: ");// 文本框final JTextField jtf1 = new JTextField();final JTextField jtf3 = new JTextField();jtf1.setColumns(25);jtf1.setColumns(3);settingpanel.add(jl3);settingpanel.add(jtf3);textpanel1.add(jl1);textpanel1.add(jtf1);final JTextField jtf2 = new JTextField();jtf2.setColumns(25);// 二进制转为十进制jb1.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String s = jtf1.getText();Double d = BtoD(s);jtf2.setText(d.toString());}private double BtoD(String s) {String b = new String(s);char[] bm;int e = 0; // 整数长度int d = 0; // 小数长度bm = b.toCharArray();double c = 0; // 小数double f = 0;// 整数int j = 0;while (j < bm.length && bm[j] != '.') {j++;e++;}d = bm.length - 1 - e;// 整数for (int i = 0; i < e; i++){// System.out.println(bm[i]);f = f + (bm[i] - 48) * Math.pow(2, e - i - 1);}// 小数for (int i = e + 1; i < b.length(); i++) {c = c + (bm[i] - 48) * Math.pow(2, -(i - e));}return c + f;// TODO 自动生成方法存根}});// 十进制转为二进制jb2.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {String s = jtf1.getText();// DtoB(s);String sss = DtoB(s);jtf2.setText(sss.toString());}private String DtoB(String s) {String b = new String(s);char[] bm;bm = b.toCharArray();int set = Integer.parseInt(jtf3.getText());char[] cm = new char[set];int a[] = new int[10];int c = 0; // 整数长度int d = 0; // 小数长度int i = 0;Integer cc = 0; // 整数部分Double dd = 0.0; // 小数部分double total = Double.parseDouble(s);String strzhengshu;int decc;while (i < bm.length && bm[i] != '.') {i++;c++;}d = bm.length - 1 - c;// 整数部分的转化for (int j = 0; j < c; j++) {cc = (int) (cc + (bm[j] - 48) * 1 * Math.pow(10, c - j - 1));}String str = cc.toString();decc = Integer.parseInt(str, 10);strzhengshu = Integer.toBinaryString(decc);// 小数部分的转化dd = total - cc;System.out.print(set);for (int k = 0; k < set; k++) {if (dd * 2 >= 1) {cm[k] = '1';dd = dd * 2 - 1;} else {cm[k] = '0';dd = dd * 2;}}String strxiaoshu = "";for (int l = 0; l < set; l++) {strxiaoshu += cm[l];}String str5 = "";str5 = strzhengshu + "." + strxiaoshu;return str5;}});textpanel2.add(jl2);textpanel2.add(jtf2);buttonpanel.add(jb1);buttonpanel.add(jb2);totalpanel.add(settingpanel);totalpanel.add(textpanel1);totalpanel.add(textpanel2);totalpanel.add(buttonpanel);Container ct = getContentPane();ct.add(totalpanel);}public static final int DEFAULT_WIDTH = 300;public static final int DEFAULT_HEIGHT = 200;}

原创粉丝点击