Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 正在寻找一种不进行四舍五入而保留两位小数的方法_Java_Decimal - Fatal编程技术网

Java 正在寻找一种不进行四舍五入而保留两位小数的方法

Java 正在寻找一种不进行四舍五入而保留两位小数的方法,java,decimal,Java,Decimal,我必须用小数点后两位显示我的输出,对于每月付款,程序输出应为205.16,对于总付款,程序输出应为12309.91。在使用十进制格式对正确答案进行四舍五入之前,但四舍五入到小数点后两位后,输出现在为0.01到高。我该怎么做才能去掉多余的小数位而不进行四舍五入.01 import javax.swing.*; import java.text.*; /** *DriverMortgageClass */ public class DriverMortgageClass { pub

我必须用小数点后两位显示我的输出,对于每月付款,程序输出应为205.16,对于总付款,程序输出应为12309.91。在使用十进制格式对正确答案进行四舍五入之前,但四舍五入到小数点后两位后,输出现在为0.01到高。我该怎么做才能去掉多余的小数位而不进行四舍五入.01

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