我必须将格式化的德国语言环境转换String
为BigDecimal
。但是,我正在努力寻找最佳解决方案。
以下代码显示了我的问题:
String numberString = "2.105,88";
NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
try {
Number parsed = nf.parse(numberString);
BigDecimal bd1 = new BigDecimal(parsed.toString());
System.out.println(bd1.toString());
BigDecimal bd2 = new BigDecimal(parsed.doubleValue());
System.out.println(bd2);
BigDecimal bd3 = new BigDecimal(numberString);
System.out.println(bd3);
} catch (ParseException e) {
e.printStackTrace();
}
这个的输出是
2105.88
2105.8800000000001091393642127513885498046875
线程“主”中的异常java.math.BigDecimal处的java.lang.NumberFormatException。
第一输出是正确的,但它并没有真正意义的一个转换String
到Number
(Double
要准确),然后回String
再次,然后进入特定类型的Number
,BigDecimal
。
第二个输出不正确,但是可以通过设置的比例尺来解决BigDecimal
。但是,数字量并不总是已知的。
第三输出显然不是我想要的。
我的问题:最好的方法是什么?有更好的方法可以做到这一点吗?
似乎没有其他方法,因为java.Lang.Number
没有返回BigDecimal
类型的方法。无论如何,这是有道理的,因为BigDecimal
仅接受格式正确的字符串,而不是"2.105,88"
like
"2105.88"
。
让我展示您的代码:
import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Locale;
public class JavaMain {
public static void main(String[] args) {
String numberString = "2.105,88";
//using casting
try {
DecimalFormat df = (DecimalFormat) NumberFormat.getInstance(Locale.GERMAN);
df.setParseBigDecimal(true);
BigDecimal bd = (BigDecimal) df.parseObject(numberString);
System.out.println(bd.toString());
} catch (ParseException e) {
e.printStackTrace();
}
//your way short version
NumberFormat nf = NumberFormat.getInstance(Locale.GERMAN);
try {
BigDecimal bd1 = new BigDecimal(nf.parse(numberString).toString());
System.out.println(bd1.toString());
} catch (ParseException e) {
e.printStackTrace();
}
String numberStringFixed = "2105.88";
//direct string formated
System.out.println(new BigDecimal(numberStringFixed));;
//direct but erroneous way if the string is not formated
System.out.println(new BigDecimal(numberString));;
}
}
我希望这有帮助!
问题内容: 我有一个我想完全输出为String的。本质上,我想使用由制表符分隔的每个元素按顺序输出。有什么快速的方法可以做到这一点吗?你可以遍历它(或删除每个元素)并将其连接为字符串,但我认为这会非常慢。 问题答案: 基本上,使用循环来迭代是唯一的选择: 不要使用此代码,请继续阅读此答案的底部,以了解为什么不希望使用此代码,以及应该使用哪个代码代替: 实际上,字符串串联就可以了,因为javac编译
我试图想出一个好的解决方案来将字符串转换为json格式,但我不知道它是否足够好。 我想我可能会使用str.replace from(to{,并在}{之间插入逗号,但我如何找到要插入的索引?“”代表Name、Author、fileSize呢?在转换为可读的json字符串之后,我可以序列化为json(由GSON/Jackson)。
本文向大家介绍在Python3中将字符串转换为字节的最佳方法,包括了在Python3中将字符串转换为字节的最佳方法的使用技巧和注意事项,需要的朋友参考一下 要将字符串转换为字节,有多种方法, 方法1:使用encode()方法 输出结果 在python3中,第一个参数encode()默认为'utf-8'。据推测,这种方法也更快,因为默认参数在C代码中导致NULL。 方法2:使用bytes()构造函数
问题内容: 顾名思义,将字符串数组转换为向量的最佳方法是什么? 谢谢 问题答案: 调用Vector的构造函数,该构造函数使用现有集合(在本例中为数组)初始化自身:
问题内容: 我有一个BigDecimal对象,我想将其转换为字符串。问题是我的值得到了分数,我得到了一个很大的数字(长度),例如,我只需要字符串中的原始数字即可: 输出为: 我需要把输出准确地放在字符串中 问题答案: 要获得准确的结果,您需要使用String构造函数或(它基于double的规范表示构造一个BigDecimal): 问题在于参数是a ,并且恰巧双精度不能正确表示。因此,“转换”为最接
本文向大家介绍C语言实现将字符串转换为数字的方法,包括了C语言实现将字符串转换为数字的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C语言实现将字符串转换为数字的方法。分享给大家供大家参考。具体实现方法如下: C语言提供了几个标准库函数,可以将字符串转换为任意类型(整型、长整型、浮点型等)的数字。以下是用atoi()函数将字符串转换为整数的一个例子: atoi()函数只有一个参数