我如何正确地将具有给定小数位数的浮点值的字符串解析为整数?

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

我有给定小数位数的浮点值。在此示例中,小数点后两位。

例如:

33.3
134.45

从那些字符串中,我想具有以下整数:

3330
13445

我想使用我们预先知道小数位数的事实将这些字符串解析为等效的整数值。在此示例中,值为2,因此实际的float / double数需要乘以100。

我已经尝试了以下代码,但是它将33.3解析为3329而不是3330

这是我尝试过的代码:

public class HelloWorld{

     public static void main(String []args){

        int decimalDigits = 2;
        String strNumber = "33.3";
        double doubleNumber = Double.parseDouble(strNumber);
        int intNumber = (int)(Double.parseDouble(strNumber) * (double)Math.pow(10,decimalDigits) );

        System.out.println(strNumber);
        System.out.println(doubleNumber);
        System.out.println(intNumber);

     }
}

这是结果:

$javac HelloWorld.java
$java -Xmx128M -Xms16M HelloWorld
33.3
33.3
3329
java math floating-point precision
2个回答
0
投票

使用BigDecimal:

String res = new BigDecimal("33.3").multiply(new BigDecimal("10"))
  .setScale(0, ROUND_UNNECESSARY)
  .toPlainString()

0
投票

为了保持精度,建议使用BigDecimal

BigDecimal

输出:

int decimalDigits = 2;
String strNumber = "33.3";
BigDecimal decimalNumber = new BigDecimal(strNumber);
int intNumber = decimalNumber.movePointRight(decimalDigits).intValue();

System.out.println(strNumber);
System.out.println(decimalNumber);
System.out.println(intNumber);
© www.soinside.com 2019 - 2024. All rights reserved.