在进行计算时避免舍入

问题描述 投票:0回答:2

我从这里得到一段Java代码,它将一个数字转换成单词,它工作得很好但是分数总是比它应该少1,例如。 122.11印有122.10

这是一段正在进行计算的代码。我该如何解决这个问题?

    String phrase = "122.11" ;
    Float num = new Float( phrase ) ;
    int dollars = (int)Math.floor( num ) ;
    int cent = (int)Math.floor( ( num - dollars ) * 100.0f ) ;
java
2个回答
0
投票

0.11无法在浮点运算中精确表示,最终内部为0.1099999(0.10999999999999943,至少在我的机器上,但这应该是通用的)。将它乘以100并将其降低,然后得到10.您可以通过将100倍数字四舍五入而不是将其放置来轻松绕过它,只需将0.5加到要舍入的数字即可。并且,你可以跳过Math.floor(),因为将数字输入int已经做了你想要的:

int cent = (int)( ( num - dollars ) * 100.0f + 0.5f) ;

0
投票
String phrase = " 555243.22" ;
Double num = new Double( phrase ) ;
double dollarsAsDouble =  Math.floor( num ) ;
double val=num - dollarsAsDouble+0.005;
int cent = (int)Math.floor(val * 100.0f ) ;
int dollars=(int) dollarsAsDouble;
System.out.println(cent);//555234
System.out.println(dollars);//22

要么:

String phrase = "122.12" ;
String[] val=phrase.split("\\.");
int dollars=new Integer(val[0]);
int cent=0;
if(val.length>1)
    cent=new Integer(val[1]);

System.out.println(cent);
System.out.println(dollars);

要么:

String phrase = "555243.22" ;
BigDecimal num = new BigDecimal(phrase);
num.setScale(2, BigDecimal.ROUND_HALF_UP);
BigDecimal result = num.subtract(new BigDecimal(num.longValue()));
System.out.println((int)(result.doubleValue()*100.0)); // 22
System.out.println(num.intValue());//555243
© www.soinside.com 2019 - 2024. All rights reserved.