如何将指数number String转换为整数String

时间:2016-05-12 13:44:10

标签: java string integer exponential

在Java中将指数整数的String类型(例如"2.4490677E7")转换为整数#String(例如"24490677")的最佳/最快方法是什么?

编辑:已知输入始终为整数。

我目前的建议如下(使用来自Apache Commons的org.apache.commons.lang.math.NumberUtils):

String input = "2.4490677E7";
String res = null;
Double d = NumberUtils.toDouble(input);
if (d != 0.0d) {
   // we have a double number here
   res = String.format("%d", d.intValue());
}

4 个答案:

答案 0 :(得分:2)

如果你需要不改变精度,那么你可以使用BigDecimal读取字符串,然后将其转换为int值

答案 1 :(得分:1)

嗨,我们可以从这个“2.4490677E7”到这个“24490677” 这是代码

import java.math.BigDecimal;

public class Test {
public static void main(String[] args) {

    String value = "2.4490677E7";
    BigDecimal result = new BigDecimal(value);
    System.out.println(result.longValue());
}
}

输出将是:24490677

我希望你在寻找这个...... 谢谢。

答案 2 :(得分:1)

怎么样

Integer res = ((Double) Double.parseDouble(input)).intValue();

答案 3 :(得分:0)

让我建议最好的方法。 应该注意精度。如果字符串是十进制值,则需要精确到十进制后的精度。

 String str = "123456789.0111222333444555666777888999E10";
 try {
     /** DOUBLE **/
     double doubleVal = Double.parseDouble(str);//still uses 'E'
     System.out.println("Pure Double: "+ doubleVal);// Pure Double: 1.23456789011122227E18
     System.out.println(new DecimalFormat("0000000000.00000000000000").format(doubleVal));//1234567890111222270.00000000000000
     String plainStrFrmDouble = BigDecimal.valueOf(doubleVal).toPlainString();
     System.out.println("From double: " + plainStrFrmDouble);//From double: 1234567890111222270
     //convert to desired decimal format
     System.out.println(new DecimalFormat("0.0000000").format(Double.parseDouble(plainStrFrmDouble)));//1234567890111222270.0000000


     /** BIG DECIMAL **/
     String plainStrFrmBigDec = new BigDecimal(str).toPlainString();
     System.out.println("From bigdecimal: " + plainStrFrmBigDec);         //From bigdecimal:      1234567890111222333.444555666777888999
     System.out.println("From bigdecimalNonplain" + new BigDecimal(str));//From bigdecimalNonplain1234567890111222333.444555666777888999 *The most PRECISE way*
 } catch (NumberFormatException nfe) {
     System.err.println("Error while formatting.");
 }

所以,我认为,新的BigDecimal(str)就足够了。