неожиданный вывод в большом десятичном классе, Java - PullRequest
0 голосов
/ 21 сентября 2018
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, например, 0.12.

Как вывести одно и то же число .12?

Мне нужно знать, почему добавляется ноль.

Ответы [ 3 ]

0 голосов
/ 21 сентября 2018

Вы можете использовать десятичный формат, чтобы избавиться от 0 впереди.

BigDecimal d = new BigDecimal(".21");
DecimalFormat df = new DecimalFormat("#.00");
System.out.print(df.format(d).toString());
0 голосов
/ 21 сентября 2018

Самым простым решением может быть просто выполнить некоторые манипуляции со строками в стандартном формате, сгенерированном 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

0 голосов
/ 21 сентября 2018

System.out.println(" "+ big[i]) вызывает метод BigDecimal toString(), и именно так он реализован, что имеет смысл, поскольку обычно так пишутся числа.

Вы можете добавить манипуляции со строками к результату toString(), но я не уверен, почему вы хотите.

Какова ваша мотивация, чтобы не иметь ноль там?

...