我试图弄清楚基于传递到该方法的数字后,小数点后显示正确数量的数字。
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()