草庐IT

malign-double

全部标签

java - 如何解决 Java 中的 "Double-Checked Locking is Broken"声明?

我想在Java中实现多线程的延迟初始化。我有一些类似的代码:classFoo{privateHelperhelper=null;publicHelpergetHelper(){if(helper==null){Helperh;synchronized(this){h=helper;if(h==null)synchronized(this){h=newHelper();}//releaseinnersynchronizationlockhelper=h;}}returnhelper;}//otherfunctionsandmembers...}我收到“双重检查锁定已损坏”声明。我该如何解

java - 如何在 JDBC 中从 resultSet 读取可能为空的 double 值?

我的数据库中有一个类型为double的列,我想使用JDBCResultSet从中读取值,但它可能为空。这样做的最佳方法是什么?我能想到三个选项,似乎都不是很好。选项1:不好,因为异常处理冗长且有异味doubled;try{d=rs.getDouble(1);//dosomething}catch(SQLExceptionex){if(rs.wasNull()){//dosomethingelse}else{throwex;}}选项2:错误,因为两次提取s=rs.getString(1);//orgetObject()if(s==null){//dosomethingelse}else{

java - 为什么 Math.round 返回一个 long 但 Math.floor 返回一个 double?

为什么不一致? 最佳答案 没有不一致:这些方法只是为了遵循不同的规范而设计的。longround(doublea)返回最接近参数的long。doublefloor(doublea)返回小于或等于参数且等于数学整数的最大(最接近正无穷大)double值。与doubleceil(doublea)比较doublerint(doublea)返回与参数值最接近且等于数学整数的double值所以按照设计,round舍入为long,rint舍入为double。自JDK1.0以来一直如此。JDK1.2中添加了其他方法(例如toRadians、toD

java - 为什么 Java 的 Double.compare(double, double) 是这样实现的?

我正在查看compare(double,double)的实现在Java标准库(6)中。上面写着:publicstaticintcompare(doubled1,doubled2){if(d1d2)return1;//NeithervalisNaN,thisValislargerlongthisBits=Double.doubleToLongBits(d1);longanotherBits=Double.doubleToLongBits(d2);return(thisBits==anotherBits?0://Valuesareequal(thisBits这个实现的优点是什么?编辑:“优

java - 如何将 double 值四舍五入到小数点后 2 位?

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:rounddoubletotwodecimalplacesinjava我想将double值四舍五入到小数点后2位。例如:我有双d=2;结果应该是result=2.00 最佳答案 Math.round(number*100.0)/100.0; 关于java-如何将double值四舍五入到小数点后2位?,我们在StackOverflow上找到一个类似的问题: https://stacko

java - 如何测试 double 是否为零?

我有一些这样的代码:classFoo{publicdoublex;}voidtest(){Foofoo=newFoo();//Isthisavalidwaytotestforzero?'x'hasn'tbeensettoanythingyet.if(foo.x==0){}foo.x=0.0;//Willthesametestbevalid?if(foo.x==0){}}我基本上是想避免将来出现被零除的异常。谢谢 最佳答案 类范围内的数值原语在未显式初始化时被初始化为零。本地范围内的数字原语(方法中的变量)必须显式初始化。如果您只担心

java - 如何使用特定语言环境在 Java 中将 String 转换为 Double?

我想将我作为字符串获得的一些数字转换为double,但这些数字不在美国标准语言环境中,而是在不同的语言环境中。我该怎么做? 最佳答案 试试java.text.NumberFormat.来自Javadocs:ToformatanumberforadifferentLocale,specifyitinthecalltogetInstance.NumberFormatnf=NumberFormat.getInstance(Locale.FRENCH);YoucanalsouseaNumberFormattoparsenumbers:myN

java - 如何从 double 中删除尾随零

这个问题在这里已经有了答案:Howtonicelyformatfloatingnumberstostringwithoutunnecessarydecimal0's(28个回答)关闭9年前。例如我需要5.0变成5,或者4.3000变成4.3。 最佳答案 你应该使用DecimalFormat("0.#")对于4.3000Doubleprice=4.3000;DecimalFormatformat=newDecimalFormat("0.#");System.out.println(format.format(price));输出是:4

java - float 或 double 的 NaN 和 Infinity 如何存储在内存中?

据我了解,java会将float作为具有以下属性的32位整数存储在内存中:第一位用于确定符号接下来的8位代表指数最后23位用于存储小数这没有为三种特殊情况留下多余的位:NaN正无穷负无穷我可以猜到负0可以用来存储其中一个。这些实际上是如何在内存中表示的? 最佳答案 Java指定float遵循IEEE754标准。这是它的存储方式:位0:符号位位1到11:指数第12至63位:分数现在,我用不同的double值执行了以下方法:publicstaticvoidprint(doubled){System.out.println(Long.to

java - ClassCastException,将 Integer 转换为 Double

ArrayListmarks=newArrayList();Doublesum=0.0;sum=((Double)marks.get(i));每次我尝试运行我的程序时,都会收到一个ClassCastException,指出:java.lang.Integercannotbecasttojava.lang.Double 最佳答案 我们可以将int强制转换为double但我们不能对包装类Integer和Double做同样的事情:inta=1;Integerb=1;//inboxing,requiresJava1.5+doublec=(d