В конце выполнения этого кода я ожидаю 0.00, но получаю -0.00. Этот код рассчитывает цену облигации на основе рыночной ставки, определяет , если это предлагается с премией или со скидкой, затем рассчитывается.Отрицательное число вместо положительного
Часть, которой я занимаюсь, определяет остаток в счете . При расчете этого я использую - = для переменной premium_bal2.
Вот код:
package totalbeginner.demo;
import java.text.NumberFormat;
import java.util.Locale;
import javax.swing.*;
public class TotalBeginner{
public static void main(String[] args){
System.out.println("We are offering a $100,000 bond at 10% par for 3 years");
double price; //price of bond determined from rates
double market_rate = Double.parseDouble(JOptionPane.showInputDialog("What is the market rate?"));
NumberFormat formatter= NumberFormat.getCurrencyInstance(Locale.UK);
int year=1;//year
double premium_bal=0;;//premium balance
double premium_bal2=0;
if(market_rate<10){//premium bond offer
price = (0.10*100000*5.5673)+(100000*0.5565);
premium_bal= price-100000;//premium bal
premium_bal2 = price-100000;//premium bal
System.out.println("Cash dr. "+formatter.format(price));
System.out.println("Premium dr. "+formatter.format(price-100000));
System.out.println("Bonds Payable cr. "+ formatter.format(100000));// issue journal entry
while(year<3){
System.out.println("Interest dr. "+formatter.format(10000));//interest payment
System.out.println("Cash cr. "+formatter.format(10000));
//write-off
System.out.println("Interest dr. "+formatter.format(premium_bal/3));
System.out.println("Premium cr. "+formatter.format(premium_bal/3));
premium_bal2-=premium_bal/3;
if (year==2){
System.out.println("Interest dr. "+formatter.format(10000));//interest payment
System.out.println("Cash cr. "+formatter.format(10000));
System.out.println("Cash cr. "+formatter.format(100000));//Bond retirement
System.out.println("Bonds Payable dr. "+formatter.format(100000));
//write-off
System.out.println("Interest dr. "+formatter.format(premium_bal/3));
System.out.println("Premium dr. "+formatter.format(premium_bal/3));
//Amount in balance account
premium_bal2-=premium_bal/3;
System.out.println("Amount in premium account: "+formatter.format(premium_bal2));
}
//counter year
year++;
}
}
System.exit(0);
}
}
Вы не должны использовать типы с плавающей запятой для представления денег. – Bubletan
Чтобы быть уверенным, '' premium_bal2' всегда больше, чем 'premium_bal/3'? fyi, double '0.00' и' -0.00' на самом деле * математически * говорение одинаковое, но различное в двоичном представлении, это ограничение компьютера (в общем). Некоторые люди пытались удалить этот отрицательный знак с некоторыми [трюками] (http://stackoverflow.com/a/11929320/4648586) в любом случае, вместо того, чтобы вмешиваться в сам номер .. - [что вам нужно знать о плавающей запятой ] (https://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –