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



我试图弄清楚基于传递到该方法的数字后,小数点后显示正确数量的数字。

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

因此,如果传递的值为123.456789,而该位置为2,则应显示123.45。打印语句是另一种方法。

 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.45n",
                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: .9876n",
                MyMath.chopDecimal(.98765, 4));
    }

这是可以使用 java.text.numberformat 的,尽管您希望将其转换为字符串以进行'显示'目的。

为了匹配您的示例,我将其转换为双重:

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

我建议您使用Java圆形模式。简单示例:

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);
}

这个问题是重复的:如何将一个数字舍入Java的N小数点

参考:Oracle文档

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

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;
	}
}

让我知道您是否有任何疑问。

您可以使用bigdecimal和setScale:

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

最新更新