Java舍入问题

Dee*_*pak 0 java

我使用以下代码来舍入作为输入给出的浮点值.但我无法做到对.如果我给80美元我应该得到$ 80.00如果我给$ 40.009889我应该得到$ 40.01.我该怎么做呢 ?

public class round {
public static float round_this(float num) {
    //float num = 2.954165f;
    float round = Round(num,2);
    return round;
  }
  private static float Round(float Rval, int Rpl) {
  float p = (float)Math.pow(10,Rpl);
  Rval = Rval * p;
  float tmp = Math.round(Rval);
  return (float)tmp/p;
    }
}

Nat*_*hes 7

这就是为什么你不使用花车来赚钱,因为你陷入了'垃圾输入,数据输出'这个游戏.请改用java.math.BigDecimal.BigDecimal允许您指定不受表示问题影响的固定小数值.

(当我说不使用包含双打的浮动时,这是同一个问题.)

这是一个例子.我创建了两个BigDecimal数字.对于第一个,我使用带浮点数的构造函数.对于第一个,我使用带字符串的构造函数.在这两种情况下,BigDecimal都会显示它包含的数字:

groovy:000> f = new BigDecimal(1.01)
===> 1.0100000000000000088817841970012523233890533447265625
groovy:000> d = new BigDecimal("1.01")
===> 1.01
Run Code Online (Sandbox Code Playgroud)

请参阅此问题以获得更多解释,此处还有另一个问题,答案很好.