将double转换为十进制格式?

时间:2017-08-31 00:37:33

标签: java netbeans formula decimalformat

我必须用Java创建一个代码作业,显示薪水从1美分开始,每天加倍10天。我唯一的问题是我无法将薪水转换为十进制格式,而且我的产出是以美元计算,而不是美分。我对编码很新,可以使用我能得到的任何帮助。我的错误是“薪水”已在主要定义,但当我将小数格式代码移到主要上方时,问题仍然存在。如何将小数位移到两个位置?我的输出是在代码下发布的,所以你们可以看到我的问题。谢谢!!

import java.util.Scanner;
import java.text.DecimalFormat;

public class hw2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
//Find number of days worked
int days;
System.out.println("How many days did you work under the current 
salary?");
days = in.nextInt();
int num = 1;
while (num <= days)
 {
    double salary = Math.pow(2, (num-1));
    DecimalFormat salary = new DecimalFormat("##.00");
    System.out.println("Your salary for day " + num + " is $" + 
    salary);
        num++;
        }
   }
}

输出:

你在目前的工资下工作了多少天?

10

第1天的工资为1.0美元

第2天的薪水是2.0美元

第3天的工资是4.0美元

第4天的工资是8.0美元

第5天的薪水是16.0美元

第6天的薪水是32.0美元

第7天的薪水是64.0美元

第8天的薪水是128.0美元

第9天的工资是256.0美元

第10天的薪水是512.0美元

2 个答案:

答案 0 :(得分:0)

您有两个具有相同名称的变量,并且您没有使用DecimalFormat格式化工资。您有两种方法可以实现您的目标:

选项#1

使用DecimalFormat格式化double

double salary = Math.pow(2, (num-1));
DecimalFormat round = new DecimalFormat("##.00");
System.out.println("Your salary for day " + num + " is $" + 
round.format(salary));

请注意,您需要使用.format()

选项#2

使用printf()格式化输出,如下所示:

double salary = Math.pow(2, (num-1));
System.out.printf("Your salary for day %d is $%.2f%n", num, salary);

或者使用String.format()来做同样的事情:

double salary = Math.pow(2, (num-1));
System.out.println(String.format("Your salary for day %d is $%.2f", num, salary));

答案 1 :(得分:0)

您的问题正在发生,因为您已使用变量名称“salary”来引用包含实际薪水的变量。每个变量名称只能在同一范围内使用一次。这就是你收到错误的原因。

但是,您还需要正确使用十进制格式才能显示所需的结果。请参阅Double decimal formatting in Java以了解如何执行此操作。

使用以下内容替换while块应该提供正确的解决方案:

while (num <= days){
    double salary = Math.pow(2, (num-1));
    DecimalFormat salaryFormat = new DecimalFormat("##.00");
    System.out.println("Your salary for day " + num + " is $" + salaryFormat.format(salary));
    num++;
}