当前位置: 首页 > 知识库问答 >
问题:

在格式化浮点数以两点精度显示时保持准确性(Java)

钱志义
2023-03-14

程序是这样的。它的意思是根据工作时数、时薪、扣缴税款等来计算员工的净工资。它计算正确,但双点精度格式将最后一个小数四舍五入,失去了计算的准确性。

示例输入:

import java.util.*;
public class Payroll
{
    static Scanner key = new Scanner(System.in);
    public Payroll()
    {
        System.out.print("Name: ");
        String name = key.next();

        System.out.print("Hours worked this week: ");
        int hoursWorked = key.nextInt();
        System.out.print("Hourly rate: ");
        double payRate = key.nextDouble();

        double payPreTax = hoursWorked * payRate;

        System.out.print("Federal tax withhold: ");
        String fedTaxStr = key.next().replace("%", "");
        double fedTax = ((Double.parseDouble(fedTaxStr)) / 100) * payPreTax;

        System.out.print("State tax withold: ");
        String stateTaxStr = key.next().replace("%", "");
        double stateTax = ((Double.parseDouble(stateTaxStr)) / 100) * payPreTax;

        double amountWithheld = fedTax + stateTax;

        double payPostTax = payPreTax - amountWithheld;

        System.out.printf("\nSummary\n\nEmployee: " + name + "\nGross Pay: %.2f\nFederal Withholding: %.2f\nState Withholding: %.2f\nTotal Deduction: %.2f\nNet Pay: %.2f", payPreTax, fedTax, stateTax, amountWithheld, payPostTax);
    }
    public static void main(String[] args)
    {
        new Payroll();
    }

}

请怜悯;我是一年级学生。

共有1个答案

干茂才
2023-03-14

在格式化浮点数以两点精度显示时保持准确性

你所要求的是自相矛盾的/不可能的。

你说:

在会计软件中处理这一问题的通常方法是将货币值表示为整数(例如整数美分)或十进制浮点表示。在Java中,BigDecimal是表示十进制浮点的标准方式。它可以应付任意精度。

 类似资料:
  • 问题内容: 如果我们运行以下代码: 它打印: 文字1.2345678990922222中的长尾将被忽略,但1.22222222222222222222中的长尾不会被忽略(变量d中的最后一个十进制数字变为3而不是2)。为什么? 问题答案: 打印a 或a 时看到的位数是Java的默认规则(从和转换为十进制)的结果。 Java的浮点数默认格式使用最少的有效十进制数字来将数字与附近的可表示数字区分开。1个

  • 问题内容: 如果我有以下小数点数字: 然后我得到以下输出: 我想要的是: 问题答案: 可能令人困惑的部分是 的表示整个数(包括小数)的长度,而不仅仅是小数之前的部分。该代表的小数位数。 因此,要使格式正确无误,最多可以有小数点前4个数字和小数点后3个位,实际上是所需的格式。

  • 问题内容: 我有一个类型的变量,我需要以不超过3个小数的精度打印它,但是它不应该有任何结尾的零… 例如。我需要 我尝试使用,我做错了吗? 谢谢。:) 问题答案: 尝试使用模式代替: 输出:

  • 在我的计算机科学课程中,我们正在研究浮点数以及它们在内存中是如何表示的。我已经理解了它们在内存中是如何表示的(尾数/有效数、指数及其偏差、符号位),我也理解了浮点是如何相互添加和减去的(反规格化和所有那些有趣的东西)。然而,在翻阅一些学习问题时,我注意到一些我无法解释的东西。 当一个不能精确表示的浮点数加到自己身上几次时,答案比我们在数学上预期的要低,但当同一个浮点数乘以一个整数时,答案就精确地得

  • 问题内容: $a = ‘35’; $b = ‘-34.99’; echo ($a + $b); 结果为0.009999999999998 这是怎么回事?我想知道为什么我的程序不断报告奇怪的结果。 为什么PHP不返回预期的0.01? 问题答案: 因为浮点运算!=实数运算。对于一些浮子和,由不精确性引起的差异的说明是。这适用于使用浮点数的任何语言。 由于浮点数是具有有限精度的二进制数,因此存在有限数量

  • 本文向大家介绍Fortran 浮点数精度,包括了Fortran 浮点数精度的使用技巧和注意事项,需要的朋友参考一下 示例 类型的浮点数real不能有任何实数值。它们可以表示实数,最多可以包含一定数量的十进制数字。 FORTRAN 77保证了两种浮点类型,而最新的标准则至少保证了两种实数类型。实变量可以声明为 x这是默认类型的实数,并且y是比更大的十进制精度的实数x。在Fortran 2008中,十