我必须将德语区域设置格式化的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();
}
Run Code Online (Sandbox Code Playgroud)
这个的出局是
2105.88
2105.8800000000001091393642127513885498046875
java.math.BigDecimal中的java"主要"java.lang.NumberFormatException中的异常java.math.BigDecimal.(未知来源)test.BigDecimalTest.main(BigDecimalTest.java:22)
第一输出是正确的,但它并没有真正意义的一个转换String到Number(Double要准确),然后回String再次,然后进入特定类型的Number,BigDecimal.
第二个输出不正确,但可以通过设置BigDecimal的比例来解决.但是,数字量并不总是已知.
第三个输出显然不是我想要的.
我的问题是,最好的方法是什么?有没有更好的方法来做到这一点?
我正在尝试使用RSA 7.5和Websphere 7服务器开发IBM JAX_WS Web服务.由于我是初学者,因此我遵循Java类第一种方法,即我首先创建Java类,然后生成WSDL文件.
当我尝试创建wsdl文件时,我得到一个例外:
java.security.PrivilegedActionException:com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException:IllegalAnnotationsException的1个计数Class有两个同名的属性"planId"
我的班级在这里看起来像这样:
public class MemberDetails{
@XMLElement(required=true)
private String planId;
//public getters and setters for the planId;
}
Run Code Online (Sandbox Code Playgroud)
我不知道为什么会发生这种异常.通过谷歌搜索,我尝试了一些替代方案来解决它,但没有一个为我工作:(
注意:
这是我在整个工作区中使用的唯一注释.我不确定这是否依赖于其他一些注释.但我尝试了一些诸如@XMLElement(name ="Plan",required = true),@ XMLType等,但每次我都得到这个例外.
这个例外是在wsgen期间发生的.(java.lang.reflect.InvocationTargetException)
编辑
基本上,当我们从java服务方法创建一个wsdl并在SOAP UI中打开该WSDL时,我们就会<!--Optional-->在每个元素的顶部.我想删除这个选项标记<!--Optional-->标记,因此我尝试使用@XMLElement(required = true)方法,这样当我在SOAP UI <!--Optional-->中打开WSDL时,不会出现强制性元素.
根据我的概念,@ XMLElement(required = true)将minOccurs设置为1,即大于零,因此当我在SOAP UI中打开它时,可选的注释将从WSDL中删除.但不幸的是它没有用,因此我的概念不正确.生成WSDL之后,我可以看到minOccurs仍为0.
请解释在SOAP UI中打开WSDL时如何删除可选标记.
问候,
以下代码按预期抛出java.util.ConcurrentModificationException:
public void test(){
ArrayList<String> myList = new ArrayList<String>();
myList.add("String 1");
myList.add("String 2");
myList.add("String 3");
myList.add("String 4");
myList.add("String 5");
for(String s : myList){
if (s.equals("String 2")){
myList.remove(s);
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,下面的代码并没有抛出异常,而我希望它被抛出:
public void test(){
ArrayList<String> myList = new ArrayList<String>();
myList.add("String 1");
myList.add("String 2");
myList.add("String 3");
for(String s : myList){
if (s.equals("String 2")){
myList.remove(s);
}
}
}
Run Code Online (Sandbox Code Playgroud)
区别在于第一个列表包含5个项目,而第二个列表包含3.使用的JVM是:
java version "1.8.0"
Java(TM) SE Runtime Environment (build 1.8.0-b132)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b70, mixed mode)
Run Code Online (Sandbox Code Playgroud)
问题:为什么第二段代码 …
我目前使用Azure报告和报告构建器为演示项目实现了一些报告.现在我们将正确地开发报告我有一些关于SSRS的问题.
谢谢