如何在小数点后显示用户定义的数字

时间:2017-09-18 20:19:37

标签: java formatting decimal

我试图弄清楚如何根据传入方法的数字显示小数点后的正确位数。

public static double chopDecimal(double value, int place)
{
    int chopped;
    //???
    return chopped;
}

因此,如果传递的值是123.456789且地点是2,则应显示123.45。 print语句是另一种方法。

 System.out.println("***MyMath ChopDecimal Test***");
    //Chop Decimal Test 1
    if (MyMath.chopDecimal(123.456789, 2) == 123.45)
    {
        System.out.println("Chop Decimal Test 1 Passed");
    }
    else
    {
        System.out.printf("Chop Decimal Test 1 Failed. Your answer: %f Correct Answer: 123.45\n",
                MyMath.chopDecimal(123.456789, 2));
    }
    //Chop Decimal Test 2
    if (MyMath.chopDecimal(.98765, 4) == .9876)
    {
        System.out.println("Chop Decimal Test 2 Passed");
    }
    else
    {
        System.out.printf("Chop Decimal Test 2 Failed. Your answer: %f Correct Answer: .9876\n",
                MyMath.chopDecimal(.98765, 4));
    }

4 个答案:

答案 0 :(得分:1)

这可以使用 java.text.NumberFormat ,但是当您希望转换为String以“显示”目的时。

为了匹配你的例子,我把它变成了一个双重的:

public static double chopDecimal(double value, int place)
{
    String chopped = NumberFormat.getInstance().setMaximumFractionDigits( place ).format( value );
    return Double.valueOf( chopped );
}

答案 1 :(得分:1)

我建议你使用java Rounding Mode。 简单的例子:

public static void main(String[] args) {
    System.out.println(chopDecimal(123.456789, 2));
}

public static String chopDecimal(double value, int place)
{
    // Parameter is the pattern
    DecimalFormat format = new DecimalFormat("0.00");
    format.setRoundingMode(RoundingMode.HALF_UP);

    return format.format(value);
}

这个问题重复: How to round a number to n decimal places in Java

参考: Oracle Documentation

答案 2 :(得分:1)

上面的所有答案都非常棒,但如果你需要能够解释这个问题,我会用所有非常基本的编程工具编写下面的代码段。研究下面的这个过程,并不总是关于解决方案,更多的是你可以提出一个解决方案。在解决任何问题时始终牢记这一点。以后总是有时间来改进您的解决方案。



public static void main(String[] args) {
chopDecimal(123.456789,2);

}
public static double chopDecimal(double value, int place)
{
	String valToStr = Double.toString(value);
	int decimal=0;
	for(int i = 0; i < valToStr.length(); i++)
	{
		if(valToStr.charAt(i) == '.')
		{
			decimal = valToStr.indexOf(valToStr.charAt(i));
			System.out.println(decimal);
			break;
		}
	}
		
	String newNum = valToStr.substring(0,(++decimal+place));
	System.out.println(newNum);
	double chopped = Double.parseDouble(newNum);
		
	return chopped;
	}

}
&#13;
&#13;
&#13;

如果您有任何问题,请与我们联系。

答案 3 :(得分:0)

您可以使用BigDecimal和setScale:

double chopped = BigDecimal
   .valueOf(value)
   .setScale(place, RoundingMode.DOWN)
   .doubleValue()