2012-02-13 52 views
-1

我需要一种简单的方法(JAVA)在此模式下舍入欧分:舍入欧分方法

  • 1.00 = 1.00
  • 1.01 = 1.00
  • 1.02 = 1.00
  • 1.03 = 1.05
  • 1.04 = 1.05
  • 1.05 = 1.05
  • 1.06 = 1.05
  • 1.07 = 1.05
  • 1.08 = 1.10
  • 1.09 = 1.10
  • 1.10 = 1.10

谁能帮助我?谢谢。

+5

你有没有试图编写任何代码? – Aziz 2012-02-13 12:24:35

+3

“任何人都可以帮助我”我们可以帮助您解决您编写的代码中的问题,但是SO不是一种代码编写服务。请发布您迄今为止写的内容。 – Raedwald 2012-02-13 12:25:35

+0

他不知道如何编写代码。我认为这是一个有效的问题。 – PiTheNumber 2012-02-13 12:30:00

回答

1
double euro = 1.07; 
final double dif = euro % 0.05; 
if (dif > 0.025) { 
    euro += 0.05 - dif; 
} else { 
    euro -= dif; 
} 
+1

使用'double'来存储金钱是个坏主意。 – Jesper 2012-02-13 12:36:15

+0

为什么使用双重存储金额是一个坏主意?如果返回错误或腐败数据,您可以发布代码吗?对不起和坦克。 – 2012-02-14 17:54:12

+0

无法正常工作:157.68 - > 157.67999999999998我需要157.68 - > 157.70 – 2012-02-14 18:00:36

0

我不知道正确的Java语法,但是这应该给招:

price = round(price * 100/5)/100 * 5 
2

一般:这是一个坏主意来存储钱花车/双打,它只会导致灾害。

如果你的号码保持足够小,你可以使用存储分数的整数:100,101,...在你的例子中。如果它们可能会变得太大,则使用BigIntegers或等效。

你可以这样转换你想要的方式:减1(分),除以粒度(在这种情况下为5美分),加1,乘以粒度。

+0

您可以请添加一些参考或理由为什么浮动是不好的钱? – PiTheNumber 2012-02-13 12:44:45

+1

当然! http://www.javapractices.com/topic/TopicAction.do?Id=13 – 2012-02-13 12:51:00