Java 正在寻找一种不进行四舍五入而保留两位小数的方法
我必须用小数点后两位显示我的输出,对于每月付款,程序输出应为205.16,对于总付款,程序输出应为12309.91。在使用十进制格式对正确答案进行四舍五入之前,但四舍五入到小数点后两位后,输出现在为0.01到高。我该怎么做才能去掉多余的小数位而不进行四舍五入.01Java 正在寻找一种不进行四舍五入而保留两位小数的方法,java,decimal,Java,Decimal,我必须用小数点后两位显示我的输出,对于每月付款,程序输出应为205.16,对于总付款,程序输出应为12309.91。在使用十进制格式对正确答案进行四舍五入之前,但四舍五入到小数点后两位后,输出现在为0.01到高。我该怎么做才能去掉多余的小数位而不进行四舍五入.01 import javax.swing.*; import java.text.*; /** *DriverMortgageClass */ public class DriverMortgageClass { pub
import javax.swing.*;
import java.text.*;
/**
*DriverMortgageClass
*/
public class DriverMortgageClass
{
public double annualInterestRate;
public int numberOfYears;
public double loanAmount;
public double monthlyPayment;
public double totalPayment;
public double monthlyInterestRate;
DecimalFormat fmt = new DecimalFormat ("0.00");
//main method
public static void main(String[] args) {
new DriverMortgageClass().start();
}
//declare private mortgage object
private Mortgage mortgage;
public DriverMortgageClass()
{
mortgage = new Mortgage();
}
public void start()
{
//get input for interest rate
String annualInterestRateString = JOptionPane.showInputDialog(null,"Enter yearly interest rate, for example 8.5",JOptionPane.QUESTION_MESSAGE);
annualInterestRate=Double.parseDouble(annualInterestRateString);
mortgage.setAnnualInterestRate(annualInterestRate);
//get input for number of years
String numberOfYearsString = JOptionPane.showInputDialog(null,"Enter number of years as an integer, for example 5",JOptionPane.QUESTION_MESSAGE);
numberOfYears= Integer.parseInt(numberOfYearsString);
mortgage.setNumberOfYears(numberOfYears);
//set loan amount
String loanAmountString = JOptionPane.showInputDialog(null,"Enter loan amount, for example 10000.00",JOptionPane.QUESTION_MESSAGE);
loanAmount= Double.parseDouble(loanAmountString);
mortgage.setLoanAmount(loanAmount);
//Invoke monthly and total payment
monthlyInterestRate=annualInterestRate/1200;
monthlyPayment=loanAmount*monthlyInterestRate /(1-(Math.pow(1/(1+monthlyInterestRate),numberOfYears*12)));
totalPayment=monthlyPayment*numberOfYears*12;
//display monthly and total payment
JOptionPane.showMessageDialog(null,"The monthly payment is"+ " " + fmt.format(monthlyPayment)+'\n'
+"The total payment is"+ " " + fmt.format(totalPayment));
System.exit(0);
}
}
使用
你不想把事情弄得一团糟吗
double c = 1.478569d;
c = (double)((long)(c*100))/100; // 1.47
双浇铸方式可能溢出[如下所述]。小心。:)
有很多方法可以做到这一点。或者
df = new DecimalFormat( "#.000" );
String num = df.format(1.478569);
num = num.substring(0, num.length()-1); // 1.47
它有用吗?使用
你不想把事情弄得一团糟吗
double c = 1.478569d;
c = (double)((long)(c*100))/100; // 1.47
双浇铸方式可能溢出[如下所述]。小心。:)
有很多方法可以做到这一点。或者
df = new DecimalFormat( "#.000" );
String num = df.format(1.478569);
num = num.substring(0, num.length()-1); // 1.47
有帮助吗?有时你可以将一个
双精度乘以100,将其转换为int
,然后返回到双精度,再除以100。换算成美分,用美分计算,在输出时换算成美元time@infixed这不是个好主意。阅读下面的答案,找出原因。int[32位]、double[64位]等等。你有没有觉得double的单位不能像美元一样用在美分上<代码>美元=整数(美分)/100.0
对不起,语言错误`美元=下限(美分)/100.0。除非你有时处理负数,否则你可以将一个double
乘以100,将其转换为int
,然后返回到double
并除以100。换算成美分,用美分计算,在输出时换算成美元time@infixed这不是个好主意。阅读下面的答案,找出原因。int[32位]、double[64位]等等。你有没有觉得double的单位不能像美元一样用在美分上<代码>美元=整数(美分)/100.0
对不起,语言错误`美元=下限(美分)/100.0。除非你处理消极情绪,否则我喜欢第二种方法,尽管如果数字太大,它可能会溢出。@JonnyHenly,先生!:)转换为long可能更好,因为double
和long
通常都是64位的。是的。我铸造了一个long
。仍然可能出错,然后出现BigDecimal
!我喜欢第二种方法,尽管如果数字太大,它可能会溢出。@JonnyHenly说得对,先生!:)转换为long可能更好,因为double
和long
通常都是64位的。是的。我铸造了一个long
。仍然可能出错,然后出现BigDecimal
!