我想从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:多个点
答案 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)
#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