没有它,如何返回科学记数法的双重?

时间:2014-07-06 23:04:48

标签: java

我在另一个类中创建了一个方法,用于计算用户投资后的金额。我试图让方法以标准格式而不是科学记数法返回值。我已经尝试查找同一主题的其他答案,这是我到目前为止所得到的

        DecimalFormat df = new DecimalFormat("#.##");      
        df.setMaximumFractionDigits(0);
        endofyearamount = Double.valueOf(df.format(endofyearamount));
        return endofyearamount; 

然而,当我运行main方法时,我仍然得到

的值
    1.2902498E7

这是我的main方法中的代码,用于显示返回值,以防您需要查看它。

    double answer = formula.calculate(age,  retiredage,  monthlyinvestment,  interestrate,  investedperyear,  endofyearamount, x, y );
        System.out.println(answer);

4 个答案:

答案 0 :(得分:1)

从不使用double,而是在使用Java代表资金时使用BigDecimalFloating points cannot be used to represent precise real numbers accurately

在另一个问题上看到我的回复comment

答案 1 :(得分:1)

首先,你不应该依赖浮动数字存储货币信息,因为它们的行为并不像你期望的那样。

第二件事是:科学表征只是一种写作价值的方式。价值不能是科学的或不科学的,因为它只是一个价值。我的意思是,没有办法将double转换为非特定的表示,而只是以非科学的方式打印其值。

无论您想如何打印它,double的值都是相同的。您可以通过忽略一些十进制值来打印它(并获得相应的舍入),但在您的情况下,您只是在做什么?将其转换为字符串以检索新值以引入新错误?

答案 2 :(得分:1)

我认为endofyearamountdouble,这意味着您返回的浮点数不是字符串。在转动它之前摆弄双倍的任何数量都不会导致改变System.out.println(answer)调用所做的格式化。而是使用

System.out.println(String.format("%.2f", answer));

答案 3 :(得分:1)

你不想在涉及金钱的计算中使用双数浮点数。

一种简单的方法是使用美分作为单位,而不是美元,并将金额(以美分为单位)存储在整数中(或长期存入大笔金额)。

举个例子:

public String centsToString(int cents) {
  int dollars = cents / 100;
  cents = cents - (dollars * 100);
  if (cents < 10)  return "$" + dollars + "." + cents + "0";
  return "$" + dollars + "." + cents;
}

测试:

System.out.println(new TestAutoTagger().centsToString(13));
System.out.println(new TestAutoTagger().centsToString(99));
System.out.println(new TestAutoTagger().centsToString(100));
System.out.println(new TestAutoTagger().centsToString(101));
System.out.println(new TestAutoTagger().centsToString(999901));

产生

$ 0.13

$ 0.99

$ 1.00包装

$ 1.10

$ 9999.10