附加两个十进制数字串并解析为double

时间:2016-12-11 03:14:48

标签: java numberformatexception

我想从0.054563获取结果String并将其解析为double。我目前的尝试看起来像,

String number1 = "54,563";
String number2 = "54,563";

String value = "0.0" + number1;
String value2 = "0.0" + number2;

Double rd1 = Double.parseDouble(value.replaceAll(",","."));
Double rd3 = Double.parseDouble(value2.replaceAll(",","."));
System.out.println(rd1);

然而,当我运行它时,我收到以下错误:

  

线程中的异常" main" java.lang.NumberFormatException:多个点

3 个答案:

答案 0 :(得分:4)

您获得了例外,因为value将为“0.054,563”,double文字中仅允许一个句点,例如0.1。您的代码value.replaceAll(",",".")只是将值更改为0.054.563,由于这两个句点,这仍然是非法的。删除之前的逗号

String value = "0.0" + number1.replaceAll(",", "");

然后,您可以使用Double rd1 = Double.parseDouble(value)而无需额外的replaceAll(...)

我强烈建议您以数学方式进行转换,而不是通过String转换和解析,因为这些操作是不必要且费用相当高的。

答案 1 :(得分:3)

您可以使用正则表达式删除所有非数字。模式\D匹配非数字。如果您需要多次执行此操作,则使用Pattern会更快。所以你可以做点什么,

String number1 = "54,563";
Pattern p = Pattern.compile("\\D");
Matcher m = p.matcher(number1);
String number2 = "0.0" + m.replaceAll("");
System.out.println(Double.parseDouble(number2));

如果您只需要执行一次,就可以像

一样内联
String number1 = "54,563";
String number2 = "0.0" + number1.replaceAll("\\D", "");
System.out.println(Double.parseDouble(number2));

两者都输出您想要的

  

0.054563

答案 2 :(得分:0)

是的,这是可能的。你必须首先将number1更改为字符串,然后执行该操作。

#ifndef BINARYSEARCHTREE_H
#define BINARYSEARCHTREE_H
#include <iostream>
#include <stdlib.h>
using namespace std;

template<class T>
class BinarySearchTree {
public:
//Default Constructor
BinarySearchTree() {
    root = NULL;
}

//Constructor with root value
BinarySearchTree(const T& rootItem) {
    root->value = rootItem;
    root->left = NULL;
    root->right = NULL;
}

void insert(const T& item) {
    Node<T> * temp = root;
    bool loop = false;

    while (loop == false) {
        if (temp->value > item) {
            temp = temp->getLeftChild();
        }
        else if (temp->value < item) {
            temp = temp->getRightChild();
        }
        else if (temp->value == item) {
            temp = temp->getRightChild();
        }
        else {
            temp->value = item;
            loop = true;
        }
    }
}

private:
    Node<T> * root = new Node<T>;
};

#endif