[英]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.