【问题标题】:Weird outputs in Java?Java中奇怪的输出?
【发布时间】:2013-12-30 19:11:15
【问题描述】:

我正在尝试用 Java 制作一个基本的命令行会计应用程序,这就是我目前想出的:

import java.util.Scanner;

public class Accounting {
public static void main(String[] args) {


    while(true){
      Scanner input = new Scanner(System.in);
        String userinput = input.nextLine();

        String[] parts = userinput.split(" ");
        String part1 = parts[0];
        String part2 = parts[1];
        String part3 = parts[2];

        int a = Integer.parseInt(part1);
        float r = Float.parseFloat(part2);
        int t = Integer.parseInt(part3);
        int Total = (int) Math.pow(a + ( 1 + ( r / 100 )), t);
        System.out.println(Total);

您输入了 3 个输入量、费率和时间。有人告诉我公式是Total = a(1+(r/100))^t。每当我输入像 25000 6.9 15 这样的输入时,我得到的数字超过 20 亿 (2147483647) 知道我做错了什么吗?

【问题讨论】:

  • 您正在查看溢出,请尝试改用 BigInteger 及其方法(并且您的公式执行错误)。
  • Math.pow(a + ( 1 + ( r / 100 )), t) 与“Total = a(1+(r/100))^t”不同。正确的(第二个)等式将 1 和 2 之间的值提高到 t;不正确的第一个提高(在你的例子中)25000 到 15。
  • 您将获得计算中定义的结果。所以要么你的输入值是错误的,要么你的计算是错误的。你到底在期待什么?
  • 其实是(a+1+r/100)^t
  • 请接受答案。

标签: java accounting


【解决方案1】:

试试这样:

double total = a*Math.pow(1.0+(r/100.0), t);

【讨论】:

  • 只要答案显然是正确的,就在没有适当解释的情况下对答案投反对票根本没有任何意义。但是对于海报+1
  • 你太好了,Sage。我不在乎 - 我对我的代表很满意。
【解决方案2】:

Math.pow(a + ( 1 + ( r / 100 )), t) 与“Total = a(1+(r/100))^t”不同。正确的(第二个)方程将 1 和 2 之间的值提高到 t;不正确的第一个加注(在您的示例中)25000 到 15。

【讨论】:

  • 从您的评论 +1 中可以看出,您似乎是第一个得到钉子的人 :)
猜你喜欢
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 2012-10-20
  • 1970-01-01
  • 2012-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多