java - 利息计算器单利计算中的截断错误(涉及DecimalFormat)

标签 java floating-point double

我为一个学术项目编写了一个程序,用于执行单利和复利计算。我遇到的问题是,如果数字没有除零以外的“分”(即,它不显示小数点 - 例如,如果金额为 1750.00,它将显示),则计算出的单利将被截断高达 1750),尽管我在复利和单利方法中都使用了 DecimalFormat!

我已经对该项目进行了广泛的调试,但我真的不知道到底发生了什么。

该计划的相关摘录如下:

  double p=1.0; // just some sample values for p, r, and y.
  double r=2.0;
  double y=3.0;
  double calculatedInterest = p + (p*(r/100)*y);
  String output = new String("Computed Simple Interest is: $");
  output = output + new DecimalFormat("#.##").format(calculatedInterest);
  return output;

我这里有完整的程序:

http://pastebin.com/sgg0P5ZQ

[编辑]故事的寓意:如果您不阅读遇到问题或不理解的类的 JavaDoc,那么您将会遇到麻烦。符号模式 #.## 不仅仅是 DecimalFormat 的通用包罗万象,不同的符号模式做不同的事情。就我而言,需要将 #.## 更改为 0.00 才能看到我想要的十进制数字。非常感谢jpe。

最佳答案

看看JavaDoc of DecimalFormat 。您使用“#.##”之类的模式。 # 的文档说:

Symbol  Location    Localized?  Meaning 
#   Number  Yes     Digit, zero shows as absent

您应该将您的模式替换为 0.00

关于java - 利息计算器单利计算中的截断错误(涉及DecimalFormat),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12658919/

相关文章:

javascript - 文件上传 API 可与 Postman 配合使用,但不能与 AngularJS 配合使用

.net - Microsoft ACE 驱动程序更改了程序其余部分的浮点精度

c++从高精度 double 获取E?

floating-point - Inno Setup - 将整数 652 转换为 float 得到 6.52?

c++ - C/C++ NaN 解析

c - -1.0 和 1.0 之间的 double 有多少位精度?

Java/线程优先级

java - 在位图上使用 Matrix.polyToPoly() 时,有没有办法不拉伸(stretch)位图?

java - 有没有办法阻止 IWorkbenchWindow 关闭?

json - 在不删除小数的情况下在 Swift 中将 float 序列化为 JSON