草庐IT

double-elimination

全部标签

java - 检查 double 是否相等和 Sonar 问题

我们正在使用Sonar检查代码的质量,Sonar找到了比较float或double与常量值是否相等的代码,如下所示:if(x==0.0){…}变量与(0.0)比较的值是常量,如果变量可以等于该值,则该值也不会被计算,而只能通过常量设置。这通常用于检查变量是否尚未设置或仍处于初始化状态,例如。G。-1.0在值只能为正的情况下可能用于“尚未设置”。因此,由于这些值从未计算,而只是从常量设置,因此Sonar投诉对我们没有用。只有对于计算值(或不能精确表示为float或double值的断裂值),对相等性测试的提示才有意义。我现在的问题是:更改代码以使Sonar不再提示此问题的最佳做法是什么?我

java - 对持有整数值的 double 变量的算术运算是否准确?

假设我有两个整数值存储在double变量中,e。例如:doublex=100.0;doubley=7.0;我可以安全地假设对这两个double变量产生整数结果的任何算术运算都将返回一个精确的整数值(作为double)吗?也就是说,例如所有:x+y=107.0x-y=93.0x*y=700.0返回准确的整数值,还是会有一些精度问题?比如x*y是699.99995左右?一般问题:对两个包含整数值的double变量的任何算术运算都会产生整数结果,是否会返回精确的整数值(作为double)?我是在Java上下文中问这个问题,但我认为它在其他语言中也是类似的。 最佳答

Java double 到具有特定精度的字符串

我想将double转换成String。我希望它的位数尽可能少,最多6位。所以我找到了String.format("%.6f",d),它将我的100.0转换为100.000000。最大精度工作正常,但我希望将其转换为100(最小精度)。您知道哪种方法是这样工作的吗? 最佳答案 使用DecimalFormat:newDecimalFormat("#.0#####").format(d)。这将生成具有1到6位十进制数字的数字。由于DecimalFormat将使用默认语言环境的符号,您可能需要提供要使用的符号://Formatusingen

java - float 和 double 的不同值

我不明白为什么float值与double值不同。从下面的示例中可以看出,对于相同的操作,float提供的结果与double提供的结果不同:publicclassTest{publicstaticvoidmain(String[]args){doublea=99999.8d;doubleb=99999.65d;System.out.println(a+b);floata2=99999.8f;floatb2=99999.65f;System.out.println(a2+b2);}}输出:199999.45199999.44您能解释一下float和double之间的区别吗?

java - 以不同顺序添加相同 double 时的不同结果

为什么相同的数字相加输出不同?publicclassTest{publicstaticvoidmain(Stringa[]){double[]x=newdouble[]{3.9,4.3,3.6,1.3,2.6};System.out.println(">>>>>>>"+sum(x));}publicstaticdoublesum(double[]d){doublesum=0;for(inti=0;i输出是:15.7如果我交换值double[]x=newdouble[]{2.6,3.9,4.3,3.6,1.3};我得到的输出为:15.700000000000001如何获得相同的输出?

c# - "Double-Checked Locking is Broken"是仅限 Java 的东西吗?

页面位于http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html说双重检查锁定在java中是有缺陷的。我只是想知道它是否也适用于其他语言(C#、Vb、C++等)我读过Doublecheckedlockingpattern:Brokenornot?,Isthisbrokendoublecheckedlocking?,Howtosolvethe"Double-CheckedLockingisBroken"DeclarationinJava?说实话,我不知道共同的共识是什么。有人说是的,它坏了其他人说不是。无

java - Double.valueOf(String s) 和 Double.ParseDouble(String s) 有什么区别?

根据我对文档的理解,ParseDouble函数生成了如下内容:DoubleparseDouble(Strings)throws...{returnnewDouble(Double.valueOf(s));} 最佳答案 逻辑相同,但Double.valueOf()的返回值返回堆分配的Double对象,而parseDouble返回原始double。您的代码示例不太正确。Java源代码如下:publicstaticdoubleparseDouble(Strings)throwsNumberFormatException{returnFlo

Java:使用 DecimalFormat 格式化 double 和整数,但保留没有小数点分隔符的整数

我正在尝试在Java程序中格式化一些数字。这些数字将是double和整数。在处理double时,我只想保留两位小数,但在处理整数时,我希望程序不影响它们。换句话说:double-输入14.0184849945double-输出14.01整数-输入13整数-输出13(not13.00)有没有办法在相同DecimalFormat实例中实现它?到目前为止,我的代码如下:DecimalFormatdf=newDecimalFormat("#,###,##0.00");DecimalFormatSymbolsotherSymbols=newDecimalFormatSymbols(Locale.

java - double 和 Double 比较的区别

我知道Double是一个包装类,它包装了double数字。今天,我看到了另一个主要区别:doublea=1.0;doubleb=1.0;Doublec=1.0;Doubled=1.0;System.out.println(a==b);//trueSystem.out.println(c==d);//false我太奇怪了!!!所以,如果我们使用Double,每次,我们都必须做这样的事情:privatestaticfinaldoubledelta=0.0001;System.out.println(Math.abs(c-d)我无法解释为什么Double直接比较会出错。请为我解释一下。

java - Mockito - 验证 double 值

我有一个名为method1的方法,它接受一个在myManager上调用的double值我传递给这个65.888*60。当我尝试验证这个时,我遇到了浮点问题。验证失败。它期望3953.28但3953.280029296875verify(myManager,times(1)).method1(65.888*60d);无论如何我可以让这个验证对浮点检查进行模糊检查。就像您使用assertEquals在末尾输入增量一样。谢谢 最佳答案 您可以捕获值(value),例如finalArgumentCaptorcaptor=ArgumentCa