繁体   English   中英

为什么在此Java程序中,字符串输出中的双精度数有太多小数?

[英]Why in this Java program the Doubles in a String Output have too many decimals?

为了解决《 Java艺术与科学》一书中的练习,我不得不编写一个程序,将公斤转换为磅和盎司的相应值。 我写了程序,但是当我尝试转换为1kg时,程序给我的结果是:1 kg = 2磅和3.200000000000006盎司

现在我的常数是每公斤2.2磅,每磅16盎司,所以3.2盎司是正确的。 但是没有那么多的0和最后的6吓到我了。

有人知道为什么会发生这种情况以及如何解决吗? 谢谢!

这是代码:

/*
* File: KgsLibras.java
* Program that converts kilograms in pounds and ounces.
*/

import acm.program.*;

public class KgsLibras extends ConsoleProgram {
public void run () {
    println ("This program will convert kilograms in pounds and ounces");
    double kgs = readDouble ("Insert kgs value: ");
    double libras = kgs * LIBRAS_POR_KG;
    double oncas = (libras - (int)libras) * ONCAS_POR_LIBRA; 
    println ((int)libras + " libras" + " e " + oncas + " Onças.");
    }
private static final double LIBRAS_POR_KG = 2.2;
private static final int ONCAS_POR_LIBRA = 16;
}

那仅仅是浮点运算原理的结果-实际上,仅在SO上,实际上有成千上万的其他引用这些问题。 简短的说法是,并非所有数字都可以使用浮点数精确地表示,这会导致出现您所看到的奇数。 本文档应该教给您关于浮点的所有知识。

同时,您可以使用format获得类似printf的格式设置选项:

System.out.format ("%.0f libras e %.2f Onças.\n",libras,oncas);

或者,如果您必须使用该特定的println方法,请使用String的格式:

println(String.format ("%.0f libras e %.2f Onças.",libras,oncas) );

您可以执行以下操作:

String libras = String.format("$%.2f", VALUE); //For example..

然后,打印libras将满足您的需求。

关于您的程序为何以这种方式打印的问题,@ fvu比我快:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM