java中BigDecimal的使用

来源:互联网 发布:知乎眼睛漂亮的女孩 编辑:程序博客网 时间:2024/05/21 18:23

Java中BigDecimal的使用

在我们初级的编写一些小的程序或者要求计算精度不高的时候我们经常会使用int 、double 、float 、long等一些常用的类型去计算,但是当我们要求比较高的时候,比如你在开发一款理财类软件的时候就不可以使用上述的类型,为什么的呢?我们来看一个例子

public class celTest{     public static void main(String[]args){          double a = 1.00006;          double b = 0.001;          System.out.println(a+b);      }}

可以看到得到的结果并不是我们所期望的,这是由于计算机中所有的计算都是转换为二进制来进行的,所以精度不是很好,那该怎么怎么办呢?有关理财软件或者银行的app不可能允许这样的情况发生,因此java为了解决这个问题使用了BigDecimal来解决,它是支持任意精度的,具体的使用方法查看java API手册,这里我就把基本的使用做一下说明。

我们应该实例化BigDecimal对象,这里有几个数字计算就实例化几个,然后调用它的方法,这里就以加、减、乘、除为例。这些方法的参数有多种,这里演示最基本的,其他的自行查阅。下面是实例化代码:

// BigDecimal的使用BigDecimal firstNum = new BigDecimal("1.00006");//实例化BigDecimal对象BigDecimal secondtNum = new BigDecimal("0.001");

然后调用的加法方法add()代码如下:

String result = firstNum.add(secondtNum).toString();System.out.println(result);

运行为:

我们可以看到,这次计算是我们所期望的,它可以是任意精度,下面我们做一个简单的计算器来学习一下它的使用!

java简易计算器


实现代码:

package mathway.equation;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.HeadlessException;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.ItemEvent;import java.awt.event.ItemListener;import java.math.BigDecimal;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JOptionPane;import javax.swing.JPanel;import javax.swing.JTextField;import javax.swing.border.TitledBorder;public class CalTest extends JFrame {public JTextField tf1;public JTextField tf2;public JTextField tf3;private JButton button;private JComboBox<String>box;String[]s = {"+","-","*","/"};public String num1 = "1";public String num2 = "1";public int flag;public CalTest(){addComponent();selectAction();okAction();setSize(500,165);setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);setLocationRelativeTo(getOwner());setTitle("java计算器");}private void addComponent() {// TODO Auto-generated method stubJPanel p1 = new JPanel();JPanel p2 = new JPanel();JPanel p3 = new JPanel();box = new JComboBox<String>();for(int i=0;i<s.length;i++){box.addItem(s[i]);}tf1 = new JTextField();tf2 = new JTextField();tf3 = new JTextField();button = new JButton("计算");JLabel label = new JLabel("java计算器");p1.add(label);p2.setBorder(new TitledBorder("参数设置"));p2.setLayout(new GridLayout(1, 4));p2.add(tf1);p2.add(box);p2.add(tf2);p2.add(button);p3.setBorder(new TitledBorder("显示结果"));p3.setLayout(new GridLayout(1, 1));p3.add(tf3);getContentPane().add(p1, new BorderLayout().NORTH);getContentPane().add(p2, new BorderLayout().CENTER);getContentPane().add(p3, new BorderLayout().SOUTH);}public void selectAction(){box.addItemListener(new ItemListener() {@Overridepublic void itemStateChanged(ItemEvent arg0) {// TODO Auto-generated method stubint stateChange = arg0.getStateChange();String item = arg0.getItem().toString();if(stateChange==ItemEvent.SELECTED){if(item=="+"){flag = 0;System.out.println("选择了加法");System.out.println(flag);}else if(item=="-"){flag = 1;System.out.println("选择了减法");System.out.println(flag);}else if(item=="*"){flag = 2;System.out.println("选择了乘法");System.out.println(flag);}else if(item=="/"){flag = 3;System.out.println("选择了除法");System.out.println(flag);}}else if(stateChange==ItemEvent.DESELECTED){}else{System.out.println("由其他触发!");}}});}public void okAction(){button.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent arg0) {num1 = tf1.getText();num2 = tf2.getText();BigDecimal one = new BigDecimal(num1);BigDecimal two = new BigDecimal(num2);if(flag==0){String result = one.add(two).toString();tf3.setText(result);}if(flag==1){String result = one.subtract(two).toString();tf3.setText(result);}if(flag==2){String result = one.multiply(two).toString();tf3.setText(result);}if(flag==3){try{String result = one.divide(two, 20, BigDecimal.ROUND_HALF_EVEN).toString();tf3.setText(result);} catch (ArithmeticException e) {JOptionPane.showMessageDialog(null, "被除数不能为零,请重新输入!");}}}});}public static void main(String[] args) {new CalTest();}}
运行结果:

加法


减法

乘法

除法

大神勿喷微笑!!!!

原创粉丝点击