3

在我简单的 Java 编写程序中,如果不显示 0-10 的平方根和立方数的结果而不显示一个小数点,我就无法显示结果?我该如何摆脱这个?

在此处输入图像描述

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package assignmenttwo;

/**
 *
 * @author JordanSimps
 */
public class AssignmentTwo {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        double Square;
        double Cube;

        for ( int Number = 0; Number <= 10; Number++ ) {
            Square = Number * Number;
            Cube = Number * Number * Number;
            System.out.printf("%-10s %-10s %-10s\n", "Number", "Square", "Cube");
            System.out.printf("%-10s %-10s %-10s\n", Number, Square, Cube);
        }
    }
}
4

4 回答 4

3

解决此问题的一个非常简单的方法是将 和 的类型更改为Square而不是。(但要确保你的结果永远是一个整数......)Cubeintdouble

你也可以使用一个DecimalFormat对象,这很容易理解。(它看起来也更像 Java ......你确实感觉有点像 C。)

// this decimal format will display number after the dot only if there is.
// 1256.200 -> 1,256.2  whereas 152.0 -> 152
DecimalFormat df2 = new DecimalFormat( "###,##0.###" );
System.out.println("formated square : "+df2.format(Square));

编辑以遵循您的示例:

public static void main(String[] args) {
    double Square;
    double Cube;

    DecimalFormat df2 = new DecimalFormat( "###,##0.###" );

    for ( int Number = 0; Number <= 10; Number++ ) {
        Square = Number * Number;
        Cube = Number * Number * Number;
        System.out.println("Number \tSquare \tCube");
        System.out.println(Number + "\t" +  df2.format(Square) + "\t" + df2.format(Cube));
    }
}

一些说明:

  • 使用第一种方法,您可以更改程序STORES的方式,您的数据(您选择整数或双精度(双精度浮点数))。在一种情况下,您的数据存储为整数,因此不能是十进制值,在另一种情况下,它接受十进制值。现在这取决于您想要什么...如果您确定不会将小数值添加到正方形和立方体并且它们不会溢出整数类型(值 < 2^31),那么您可以使用第一种方法

  • 使用第二种方法,您只是更改计算机显示号码的方式。因此,您的数字始终存储为双精度浮点数,因此它可以接受更多值,并且您的程序将适合更多的用例。当你想向用户显示你的号码时,你告诉计算机(使用 DecimalFormat 对象)你想怎么做。在我的示例中,我说只有在要显示重要数字时才需要小数点后的 3 个数字。您可以在这里查看更多详细信息

恕我直言,我会建议第二种方法。

于 2013-09-02T08:26:48.637 回答
2

指定格式为%-10.0f. 小数点后的部分允许您指定精度。

于 2013-09-02T08:26:24.277 回答
0

类型将您的变量转换为 Long

System.out.printf("%-10s %-10s %-10s\n", (long)Number, (long)Square, (long)Cube);

于 2013-09-02T08:37:52.843 回答
-1

使用 BigDecimal 集将比例设置为 0

BigDecimal a = new BigDecimal ("2.1");
a.setScale(0, BigDecimal.ROUND_HALF_EVEN).toString() // => 2
于 2013-09-02T08:25:40.383 回答