我试图弄清楚如何根据传入方法的数字显示小数点后的正确位数。
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));
}
答案 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);
}
答案 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;
如果您有任何问题,请与我们联系。
答案 3 :(得分:0)
您可以使用BigDecimal和setScale:
double chopped = BigDecimal
.valueOf(value)
.setScale(place, RoundingMode.DOWN)
.doubleValue()