大十进制类,Java意外输出

时间:2018-09-21 14:59:28

标签: java bigdecimal

import java.math.BigDecimal;
import java.util.Scanner;

public class bigd {

    public static void main(String[]args) {

        Scanner s=new Scanner(System.in);   
        int count=s.nextInt();

        // take  n inputs and put them in array
        String [] number=new String [count] ;

        for(int i=0; i<number.length; i++) {        
            number[i]=s.next();     
        }// end transfer forr 

        BigDecimal [] big=new BigDecimal[count];

        for(int i=0;i<number.length; i++) { 
            big[i]= new BigDecimal(number[i]);  
        }// big loop

        //sorting 
        for(int i=0; i<big.length; i++) {   
            for(int j=i+1; j<big.length; j++) { 
                if(big[i].compareTo(big[j])<0) {
                    BigDecimal temp=big[i];
                    big[i]=big[j];
                    big[j]=temp;        
                }// if end      
            }// inner loop  
        } // outer sort loop 
        //end soting

        //display
        for(int i=0; i<big.length;i++) {
            System.out.println(" "+ big[i]);
        }//end disp

        s.close();  
    }// main

}// class

这里的问题是,当我对提供的输入进行排序时,它会在数字.12前面加一个零,因此它会输出与0.12这样的数字0。

如何输出相同的数字.12

我需要知道为什么要添加零。

3 个答案:

答案 0 :(得分:2)

最简单的解决方案可能是对BigDecimal.toString()生成的标准格式进行一些字符串操作,如

BigDecimal bd = new BigDecimal(".12");    
System.out.println(bd.toString().replaceFirst("^0\\.", "."));

输出:.12

如果您想使用DecimalFormat,这应该适用于您提供的示例输入:

BigDecimal big = new BigDecimal(".12");
DecimalFormat df = new DecimalFormat(".##");
System.out.println(df.format(big));

输出:.12

但是请注意,这将最多打印2个小数位。您可以将其增加到要在小数部分中看到的许多数字。

但是,如果您想确保查看BigDecimal中所有小数位的 ,则可以执行以下操作:

BigDecimal big = new BigDecimal(".123456789");
DecimalFormat df = new DecimalFormat(".");
df.setMaximumFractionDigits(big.scale());  
System.out.println(df.format(big));

输出:.123456789

答案 1 :(得分:1)

text_dec调用BigDecimal的System.out.println(" "+ big[i])方法,这就是它的实现方式,这很有意义,因为通常这是数字的写法。

您可以在toString()的结果中添加字符串操作,但是我不确定为什么要这么做。

您那里没有零的动机是什么?

答案 2 :(得分:1)

您可以使用小数格式来消除前面的0。

BigDecimal d = new BigDecimal(".21");
DecimalFormat df = new DecimalFormat("#.00");
System.out.print(df.format(d).toString());