2013-12-22 54 views
1

我写了一个程序,我不知道我应该如何做小数格式?我以为我做得很对,显然我不能正确地做十进制格式。可以,有人帮我用十进制格式?十进制格式问题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)); 

    } 
} 
+0

它取决于你希望你的小数点格式是怎么样的? –

+0

显示你想要的输出,电流输出和输入 –

+0

(我想要的)有点这样:1,234.56(在第二个十进制数之后舍入)。 (我得到)错误! – Wumbo

回答

1

试试这个格式化你的双(S)...我也不得不更新你的方法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)); 
} 
+0

我试过你的代码,我有一个编译错误?另外,用户应该输入数字... – Wumbo

1

的问题是格式化的回报一个字符串。你应该在梅托德签名

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)); 

          ^^ 
+0

这究竟在哪里呢?我不确定我应该替换哪个公共静态? – Wumbo

+0

这可能是一个荒谬的问题,但你可以帮我吗? ( – Wumbo

+0

查看我的编辑。检查是否可行 –

0

你需要在你尝试在VAR()函数print.If的时间来格式化双,然后用双偏差分配那么它会因特殊字符给NumberFormatException的它返回Var()。你可以运行这个代码它会给你输出。

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); 
     }