我是一个完全新手的程序员,我对如何使用printf感到很困惑。在我的代码中使用printf是在paymentCalc方法的最后;我正在尝试将数据打印到一行,指定2个小数点进行打印,并在打印下一个输出之前将其填充10个空格。 代码根本不是格式化的。我在这做错了什么?它都是在同一行上打印,但它打印了一百万个小数,而且它似乎没有正确填充。
update firstc set sname=@sname,sage=@sage,sclass=@sclass where firstc.sid=@sid"
编辑: 我将代码更改为
/*
* Step 1: Get starting annual interest rate
* Step 2: Get ending annual interest rate
* Step 3: Get increment rate
* Step 4: Get First # of years for repayment
* Step 5: Get Last # of years for repayment
* Step 6: Get # of years to increment by
* Step 7: Get loan amount
*
* Convert annual rates to monthly rates MIR = Annual rate/12
* MTP = # of years * 12
*
* MIR = monthly interest rate
* MTP = months to pay
* Annuity Factor =(mir*(1+mir)^mtp)/(((1+mir)^mtp)-1)
* Payment = Amount Loaned * Annuity Factor
*
*
* Produce a list of possible loan payments
* Based on a series of annual interest rates
* Start at user entered rate and increment until it hits user entered max
* Display annual payment as monthly payments
* */
import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
public class methodshomework {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//VARIABLES
//amounts in years
double startAnnInt = 0;
double endAnnInt = 0;
double incRate = 0;
double incRatePercent = 0;
double firstYears = 0;
double lastYears = 0;
double incYears = 0;
double loanAmt = 0;
//amounts in months
double startMonthInt = 0;
double endMonthInt = 0;
double monthIncRate = 0;
double firstMonths = 0;
double lastMonths = 0;
double incMonths = 0;
double monthIncRatePercent = 0;
double annIncRatePercent = 0;
System.out.println("Hello, and welcome to the loan calculator");
//Acquire necessary data
System.out.println("What is the starting annual interest rate? (please enter as XX, where XX = XX%)");
startAnnInt = (scanner.nextDouble()/100);
System.out.println("What is the ending annual interest rate? (please enter as XX, where XX = XX%)");
endAnnInt = (scanner.nextDouble()/100);
System.out.println("What is the annual increment rate? (please enter as XX, where XX = XX%)");
incRate = (scanner.nextDouble()/100);
System.out.println("What is the first term for payment (in years)?");
firstYears = scanner.nextDouble();
System.out.println("What is the last term for payment (in years)?");
lastYears = scanner.nextDouble();
System.out.println("What is the term increment (in years)?");
incYears = scanner.nextDouble();
System.out.println("What is the loan amount? (in the form XXXXXX, where XXXXXX = $XXX,XXX)");
loanAmt = scanner.nextDouble();
double[] monthArray = yearToMonth(firstYears, lastYears, incYears, startAnnInt, endAnnInt, incRate);
firstMonths = monthArray[0];
lastMonths = monthArray[1];
incMonths = monthArray[2];
startMonthInt = monthArray[3];
endMonthInt = monthArray[4];
monthIncRate = monthArray[5];
monthIncRatePercent = monthArray[6];
annIncRatePercent = monthArray[7];
paymentCalc(startMonthInt, endMonthInt, monthIncRate, firstMonths, lastMonths, incMonths, loanAmt, firstYears, lastYears, incYears, startAnnInt, endAnnInt, incRate);
}
//MODULES HERE
public static double[] yearToMonth(double firstYears, double lastYears, double incYears, double startAnnInt, double endAnnInt, double incRate){
double firstMonths = 0;
double lastMonths = 0;
double incMonths = 0;
double startMonthInt = 0;
double endMonthInt = 0;
double monthIncRate = 0;
double monthIncRatePercent = 0;
double annIncRatePercent = 0;
//do our conversions
firstMonths = (firstYears * 12);
lastMonths = (lastYears * 12);
incMonths = (incYears * 12);
startMonthInt = (startAnnInt / 12);
endMonthInt = (endAnnInt / 12);
monthIncRate = (incRate / 12);
monthIncRatePercent = (monthIncRate/100);
annIncRatePercent = (incRate/100);
//put our conversions into an array
double[] monthArray = {firstMonths, lastMonths, incMonths, startMonthInt, endMonthInt, monthIncRate, monthIncRatePercent, annIncRatePercent};
//return our conversions
return monthArray;
}
public static void paymentCalc(double startMonthInt, double endMonthInt, double monthIncRate, double firstMonths, double lastMonths, double incMonths, double loanAmt, double firstYears, double lastYears, double incYears, double startAnnInt, double endAnnInt, double incRate){
double monthInt = 0;
double monthsToPay = 0;
double rowNumber = (((lastYears - firstYears))/incYears);
double rowNumberWithInt = (rowNumber + 1);
double colNumber = ((endMonthInt - startMonthInt)/monthIncRate);
double colNumberWithTop = (colNumber+1);
double currentYears = 0;
double currentMonths = 0;
double currentMonthInt = 0;
double currentPayment = 0;
double currentAnnInt = 0;
double annuityAmt = 0;
//counting columns
for (double i = 0; i <= colNumberWithTop; i++) {
//printing the top column
if (i == 0){
System.out.printf("%-10s", "Interest Rate");
for (double k = 0; k <= rowNumber; k++) {
currentYears = (firstYears + (incYears * i));
System.out.printf("%10s", currentYears + " Years"); }
} else if (i > 0) {
//finding annual interest rate for printing, and monthly interest rate as a decimal for math
currentAnnInt = (startAnnInt + (incRate * i));
currentMonthInt = ((currentAnnInt/100)/12);
System.out.printf("%.2f10s\n", (currentAnnInt * 100));
for (double k = 0; k <= rowNumber; k++) {
monthsToPay = (startMonthInt + (monthIncRate * i));
annuityAmt = annuityCalc(currentMonthInt, monthsToPay);
currentPayment = (loanAmt * annuityAmt);
System.out.printf("%.2f10s", currentPayment);
}
}
}
}
public static double annuityCalc(double monthInt, double monthsToPay){
double annuityFactor = 0;
double mirPow = 0;
mirPow = Math.pow((1+monthInt), monthsToPay);
annuityFactor = ((monthInt*mirPow)/(mirPow-1));
return annuityFactor;
}
}
它现在给我“java.util.UnknownFormatConversionException:Conversion ='1'”
编辑2: 我已将代码更改为
for (double i = 0; i <= colNumberWithTop; i++) {
//printing the top column
if (i == 0){
System.out.printf("%10", "Interest Rate");
for (double k = 0; k <= rowNumber; k++) {
currentYears = (firstYears + (incYears * i));
System.out.printf("%10", currentYears + " Years"); }
} else if (i > 0) {
//finding annual interest rate for printing, and monthly interest rate as a decimal for math
currentAnnInt = (startAnnInt + (incRate * i));
currentMonthInt = ((currentAnnInt/100)/12);
System.out.printf("%10.2f\n", currentAnnInt);
for (double k = 0; k <= rowNumber; k++) {
monthsToPay = (startMonthInt + (monthIncRate * i));
annuityAmt = annuityCalc(currentMonthInt, monthsToPay);
currentPayment = (loanAmt * annuityAmt);
System.out.printf("%10.2f", currentPayment);
}
我要回来的数据是
public static void paymentCalc(double startMonthInt, double endMonthInt, double monthIncRate, double firstMonths, double lastMonths, double incMonths, double loanAmt, double firstYears, double lastYears, double incYears, double startAnnInt, double endAnnInt, double incRate){
double monthInt = 0;
double monthsToPay = 0;
double rowNumber = (((lastYears - firstYears))/incYears);
double rowNumberWithInt = (rowNumber + 1);
double colNumber = ((endMonthInt - startMonthInt)/monthIncRate);
double colNumberWithTop = (colNumber+1);
double currentYears = 0;
double currentMonths = 0;
double currentMonthInt = 0;
double currentPayment = 0;
double currentAnnInt = 0;
double annuityAmt = 0;
//counting columns
for (double i = 0; i <= colNumberWithTop; i++) {
//printing the top column
if (i == 0){
System.out.printf("%-20s", "Interest Rate");
for (double k = 0; k <= rowNumber; k++) {
currentYears = (firstYears + (incYears * i));
System.out.printf("%-20s", currentYears + " Years");
}
System.out.println();
} else if (i > 0) {
//finding annual interest rate for printing, and monthly interest rate as a decimal for math
currentAnnInt = (startAnnInt + (incRate * i));
currentMonthInt = ((currentAnnInt/100)/12);
System.out.printf("%-20.2f%%", currentAnnInt*100);
for (double k = 0; k <= rowNumber; k++) {
monthsToPay = (firstMonths + (incMonths * i));
annuityAmt = annuityCalc(currentMonthInt, monthsToPay);
currentPayment = (loanAmt * annuityAmt);
System.out.printf("%-20.2f", currentPayment);
}
System.out.println();
}
}
}
为什么它这样做呢?它似乎是在30年专栏下打印利率并将所有其他列左移一个,并在顶部列的末尾打印第一个利率
预期输出
Interest Rate 15.0 Years 15.0 Years 15.0 Years 15.0 Years
4.25% 28235795.88 28235795.88 28235795.88 28235795.88
4.50% 26667168.53 26667168.53 26667168.53 26667168.53
4.75% 25263659.87 25263659.87 25263659.87 25263659.87
5.00% 24000502.07 24000502.07 24000502.07 24000502.07
5.25% 22857645.03 22857645.03 22857645.03 22857645.03
5.50% 21818684.11 21818684.11 21818684.11 21818684.11
5.75% 20870067.61 20870067.61 20870067.61 20870067.61
6.00% 20000502.50 20000502.50 20000502.50 20000502.50
6.25% 19200502.59 19200502.59 19200502.59 19200502.59
>
答案 0 :(得分:0)
PrintStream#printf
接受格式字符串和对象,返回格式化字符串。格式字符串具有特定的数值格式:
%[argument_index$][flags][width][.precision]conversion
例如,要使一个数字占用15个字符并且有2个小数位,则以下格式字符串将执行以下操作:
%15.2f
。
在编辑中,您缺少格式化字符串的转换部分。这导致了UnknownFormatConversionException
。每个格式字符串必须以转换(d,f,b,s)结束。
例如,更改:
System.out.printf("%10", currentYears + " Years");
为:
System.out.printf("%10s", currentYears + " Years");
请注意格式字符串末尾的s
。阅读official documentation.
答案 1 :(得分:0)
问题是,当我要求你移除你到处移除的那个... 这应该现在可以使用
- i want this from scratch
- i m new in mvc framewrok
- i m begineer in laravel
- i want custom login
根据OP的要求已编辑。