有个同学在做微机原理作业时要转换N位二进制小数,而一般的转换软件只有整数转换,
就帮他做了一个冬冬。
代码
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.awt.Toolkit;
public class Converse {
//声明各组件
JFrame frame = new JFrame();
JPanel contentPane;
JLabel jLabel1 = new JLabel();
JLabel jLabel2 = new JLabel();
JTextField numField = new JTextField();
JTextField lengthField = new JTextField();
JLabel jLabel3 = new JLabel();
JButton jButton1 = new JButton();
JTextArea outPutArea = new JTextArea();
JScrollPane jScrollPane1 = new JScrollPane();
JOptionPane message = new JOptionPane();
//使窗体居中显示的方法
public void centerWindow(){
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
Dimension frameSize = frame.getSize();
if (frameSize.height > screenSize.height) {
frameSize.height = screenSize.height;
}
if (frameSize.width > screenSize.width) {
frameSize.width = screenSize.width;
}
frame.setLocation((screenSize.width - frameSize.width) / 2,
(screenSize.height - frameSize.height) / 2);
frame.setVisible(true);
}
//面板和组件初始化
public Converse() {
contentPane = (JPanel) frame.getContentPane();
contentPane.setLayout(null);
frame.setSize(new Dimension(400, 300));
frame.setTitle("十进制 -> 二进制");
frame.setResizable(false);
jLabel1.setText("请输入一个正数,例如 24.74:");
jLabel1.setBounds(new Rectangle(30, 34, 188, 26));
jLabel2.setText("输出的二进制数的小数的位数");
jLabel2.setBounds(new Rectangle(30, 76, 172, 31));
numField.setHorizontalAlignment(SwingConstants.RIGHT);
numField.setBounds(new Rectangle(230, 34, 139, 28));
lengthField.setText("8");
lengthField.setHorizontalAlignment(SwingConstants.RIGHT);
lengthField.setBounds(new Rectangle(230, 79, 139, 28));
jLabel3.setText("结果:");
jLabel3.setBounds(new Rectangle(30, 137, 46, 31));
jButton1.setBounds(new Rectangle(149, 230, 99, 25));
jButton1.setText("计算");
jButton1.addActionListener(new actionAdapter());
jScrollPane1.setBounds(new Rectangle(86, 136, 283, 74));
contentPane.add(numField);
contentPane.add(jLabel1, null);
contentPane.add(lengthField);
contentPane.add(jButton1);
contentPane.add(jScrollPane1);
contentPane.add(jLabel3);
contentPane.add(jLabel2);
outPutArea.setLineWrap(true);
jScrollPane1.getViewport().add(outPutArea);
}
//计算按钮的监[屏蔽]和事件方法
class actionAdapter implements ActionListener {
public void actionPerformed(ActionEvent e) {
try{
Double num = new Double(numField.getText());
int length = new Integer(lengthField.getText());
Integer intNum = new Integer(num.intValue());
String intBinNum = intNum.toBinaryString(num.intValue());
String strOutput = new String();
double a = num - (double)intNum;
double b = 0;
int binNum[] = new int[length];
for (int i = 0; i < length; i++) {
b = a * 2;
if (b > (double) 1) {
binNum[i] = (int) 1;
a = b - (double) 1;
} else if (b < (double) 1) {
binNum[i] = (int) 0;
a = b;
} else if (b == (double) 1) {
binNum[i] = (int) 1;
break;
}
}
for (int j = 0; j < length; j++) {
strOutput = strOutput + binNum[j];
}
if (strOutput.length()==0){
outPutArea.setText(intBinNum);
}else{
outPutArea.setText(intBinNum + "." + strOutput);
}
}catch(NumberFormatException ee){
message.showMessageDialog(frame,"数据格式错误");
}
}
}
//main 方法
public static void main(String[] args) {
Converse conv = new Converse();
conv.centerWindow();
conv.frame.setVisible(true);
}
}