据我了解,RoundingMode.HALF_UP使用我们传统的舍入方式。但是,它没有给我预期的结果:
我正在使用具有不同参数的DecimalFormat()(#,#。#,...等)并输入双3.5545
// taken from Util
public static void setRound(int a) // Set rounding decimal places
{
roundTo = a;
String t = "#";
if (roundTo > 0)
{
t += ".";
for (int u = 1; u <= roundTo; u++)
t += "#";
}
df = new DecimalFormat(t);
df.setRoundingMode(RoundingMode.HALF_UP);
}
public static String round(double d) // Rounds up answers to set place
{
return df.format(d);
}
// taken from Testing class
for (int a = 0; a < 5; a++)
{
Util.setRound(a);
System.out.println(Util.round(3.5545));
}
// results
0 -> 4
1 -> 3.6
2 -> 3.55
3 -> 3.554 *(I want 3.555)*
4 -> 3.5545
我怎样才能解决这个问题(任何数字落后5轮)? 任何帮助将不胜感激。
谢谢。
答案 0 :(得分:3)
你可以使用BigDecimal scale方法;
for (int i = 0; i < 5; i++) {
BigDecimal bg = new BigDecimal("3.5545").setScale(i, RoundingMode.HALF_UP);
System.out.println(bg);
}
输出;
0 --> 4
1 --> 3.6
2 --> 3.55
3 --> 3.555
4 --> 3.5545
答案 1 :(得分:0)
与此相关的new Date
function可能会或可能不会在您的java版本中修复。
答案 2 :(得分:-1)
这可能是因为双精度的原因。试试这种方式它会起作用:
// taken from Testing class
for (int a = 0; a < 5; a++)
{
Util.setRound(a);
System.out.println(Util.round(new BigDecimal("3.5545")); // you also need to change your round() method to accept a BigDecimal input.
}