簡體   English   中英

十進制格式問題Java

[英]Decimal Format Issue Java

我寫了一個程序,我不知道該怎么做十進制格式? 我以為我做對了,顯然我不能正確執行十進制格式。 有人可以幫我十進制格式嗎?

這是我的代碼:

import java.text.DecimalFormat;
import java.util.*;
public class Mean {
    public static void main(String [] args){
        Scanner s = new Scanner(System.in);
            double[]x = new double[10];
            int i;
            for(i = 0;i < 10; i++){
                x[i] = s.nextDouble();
            }
            double mean = mean(x, i);
            double deviation = var(x);
            System.out.println("The mean is " + mean);
            System.out.println("The standard deviation is " + deviation);
    }
public static double sum(double[] a) {
        double sum = 0.0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i];
        }
        return sum;
    }
    public static double mean(double[]x, double i){
        if (x.length == 0) return Double.NaN;
        double sum = sum(x);
        return sum / x.length;
    }
    public static double var(double[] x) {
        if (x.length == 0) return Double.NaN;
        double avg = mean(x, 10);
        double sum = 0.0;
        for (int i = 0; i < x.length; i++) {
            sum += (x[i] - avg) * (x[i] - avg);
        }
        DecimalFormat myFormatter = new DecimalFormat("#,##0.00");
        return sum / myFormatter.format(Math.sqrt(x.length - 1));

    }
}

試試這個來格式化你的雙精度格式...我還必須更新你的方法var

public static String formatDouble(double in) {
  DecimalFormat myFormatter = new DecimalFormat(
      "#,##0.00");
  return myFormatter.format(in);
}

public static double var(double[] x) {
  if (x.length == 0)
    return Double.NaN;
  double avg = mean(x);
  double sum = 0.0;
  for (int i = 0; i < x.length; i++) {
    sum += (x[i] - avg) * (x[i] - avg);
  }
  return sum / Math.sqrt(x.length - 1);
}

public static void main(String[] args) {
  double[] x = new double[] {
    2000.20, 1000.10, 3000.30, 4000.40,5000.50,
    6000.60,7000,70,8000.80,9000.90
  };
  double mean = mean(x);
  double deviation = var(x);
  System.out.println("The mean is "
      + formatDouble(mean));
  System.out.println("The standard deviation is "
      + formatDouble(deviation));
}

問題是格式化程序返回一個String。 您應該在方法簽名中返回一個字符串

public static String var(double[] x) 

也是這條線

return sum / myFormatter.format(Math.sqrt(x.length - 1));

如果您要返回字符串,則將不起作用。 您應該先進行計算,然后格式化。 然后返回格式化的號碼

編輯:嘗試一下,看看是否可行

public static String var(double[] x) {
    if (x.length == 0) 
        return null;

    double avg = mean(x, 10);
    double sum = 0.0;
    for (int i = 0; i < x.length; i++) {
        sum += (x[i] - avg) * (x[i] - avg);
    }
    DecimalFormat myFormatter = new DecimalFormat("#,##0.00");
    double result = sum / Math.sqrt(x.length - 1);

    return myFormatter.format(result);

}

然后在這個double deviation = var(x); 將其替換為String deviation = var(x);

編輯2:完整的代碼

import java.text.DecimalFormat;
import java.util.*;
public class Mean {
    public static void main(String [] args){
        Scanner s = new Scanner(System.in);
            double[]x = new double[10];
            int i;
            for(i = 0;i < 10; i++){
                x[i] = s.nextDouble();
            }
            double mean = mean(x, i);
            String deviation = var(x);                  // changed to String
            System.out.println("The mean is " + mean);
            System.out.println("The standard deviation is " + deviation);
    }
public static double sum(double[] a) {
        double sum = 0.0;
        for (int i = 0; i < a.length; i++) {
            sum += a[i];
        }
        return sum;
    }
    public static double mean(double[]x, double i){
        if (x.length == 0) return Double.NaN;
        double sum = sum(x);
        return sum / x.length;
    }
    public static String var(double[] x) {         // changed return
        if (x.length == 0) 
            return null;

        double avg = mean(x, 10);
        double sum = 0.0;
        for (int i = 0; i < x.length; i++) {
            sum += (x[i] - avg) * (x[i] - avg);
        }
        DecimalFormat myFormatter = new DecimalFormat("#,##0.00");
        double result = sum / Math.sqrt(x.length - 1);

        return myFormatter.format(result);

    }
}

更新:正確的標准偏差公式

double result = Math.sqrt(sum / (x.length - 1));

                          ^^

您需要在打印時對double進行格式化。如果您嘗試使用var()函數,然后使用double偏差進行賦值,則由於Var()返回的特殊字符,它將給出numberformatException。您可以運行以下代碼您的輸出。

 public static void main(String[] args) throws ParseException {
            Scanner s = new Scanner(System.in);
            double[]x = new double[10];
            int i;
            for(i = 0;i < 2; i++){
                x[i] = s.nextDouble();
            }
            double mean = mean(x, i);
            double deviation = var(x);
            DecimalFormat myFormatter = new DecimalFormat("#,##0.00");
            System.out.println("The mean is " + mean);
            System.out.println("The standard deviation is " +myFormatter.format(deviation));
        }
        public static double sum(double[] a) {
            double sum = 0.0;
            for (int i = 0; i < a.length; i++) {
                sum += a[i];
            }
            return sum;
        }
        public static double mean(double[]x, double i){
            if (x.length == 0) return Double.NaN;
            double sum = sum(x);
            return sum / x.length;
        }
        public static double var(double[] x) {
            if (x.length == 0) return Double.NaN;
            double avg = mean(x, 10);
            double sum = 0.0;
            for (int i = 0; i < x.length; i++) {
                sum += (x[i] - avg) * (x[i] - avg);
            }
            return sum / Math.sqrt(x.length - 1);
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM