我必须用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美元
答案 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++;
}