本文的目的是介绍为什么f的详细情况,特别关注Doublex比f的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解为什么f的机会,同时也不会遗漏关于AndroidCirc
本文的目的是介绍为什么f的详细情况,特别关注Double x比f的相关信息。我们将通过专业的研究、有关数据的分析等多种方式,为您呈现一个全面的了解为什么f的机会,同时也不会遗漏关于Android Circle进度栏-显示值通常为Double Double、assertEquals(Double,Double)和assertEquals(double,double,delta)之间的Junit差异、c# – 将double与0进行比较是错误的:doubleVariable == 0?、C++:支持 std::complex
- 为什么f(Double x)比f(double…x)更好的匹配?(为什么用double和float运算结果不同)
- Android Circle进度栏-显示值通常为Double Double
- assertEquals(Double,Double)和assertEquals(double,double,delta)之间的Junit差异
- c# – 将double与0进行比较是错误的:doubleVariable == 0?
- C++:支持 std::complex
AND double 的通用 if 语句
为什么f(Double x)比f(double…x)更好的匹配?(为什么用double和float运算结果不同)
今天,我正在为即将参加的Java考试而学习,但遇到了这个问题:
设
A
一个定义如下的类:class A { public void f(Double x) { System.out.println("A.f(Double)"); } public void f(double... x) { System.out.println("A.f(double...)"); }}
该指令产生的输出是什么
A a = new A(); a.f(1.0);
?
答案似乎是,A.f(Double)
但我不明白为什么。有人可以给我适当的解释吗?
答案1
小编典典与具有可变参数列表的函数相比,重载解析始终偏向于使用具有明显数量的参数的函数,即使这意味着该1.0
函数是自动装箱的。
更详细地说,根据JLS
15.12.2选择具有此优先级的函数:
- 类型加宽
- 自动装箱
- 可变参数
Android Circle进度栏-显示值通常为Double Double
如何解决Android Circle进度栏-显示值通常为Double Double?
在我的项目中,我需要使用Circle Progress Bar。 我发现了一个非常有趣的存储库:https://github.com/lzyzsd/CircleProgress
但是我有问题。我需要在圆形进度条上显示Double类型的值,但需要Integer。
虽然我可以将进度削减到Integer,但必须在Double中显示它。
我需要帮助来解决这个问题或其他解决方案。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
assertEquals(Double,Double)和assertEquals(double,double,delta)之间的Junit差异
我进行了一个junit测试,使用以下命令声明了两个Double对象:
Assert.assertEquals(Double expected, Double result);
很好,然后我决定将其更改为使用原始double,除非您也提供了增量,否则该结果被弃用了。
所以我想知道在assertEquals中使用Double对象还是原始类型有什么区别?为什么不使用不带增量的对象,但不推荐使用不带增量的基元呢?Java是否在后台执行了已经考虑了默认增量值的操作?
谢谢。
答案1
小编典典没有断言方法的JUnit与签名
assertEquals(Double expected, Double result);
但是,有一个通用的对象:
assertEquals(Object expected, Object result);
这将调用对象的equals
方法,并且您可以预期,不建议使用此方法来比较Double
对象。
如您所见,对于双精度数,绝对有必要使用增量进行比较,以避免浮点舍入的问题(在其他一些答案中已有说明)。如果您使用assertEquals
带有double
参数的3参数版本
assertEquals(double expected, double actual, double delta);
您的Double
s会被自动取消装箱,double
并且一切都会正常运行(并且测试不会意外失败:-)。
c# – 将double与0进行比较是错误的:doubleVariable == 0?
double doubleVariable=0.0; if (doubleVariable==0) { ... }
或者这个代码会受到潜在的四舍五入问题的困扰?
解决方法
你最好还是阅读关于浮点数的讨论,这里是0比较:Is it safe to check floating point values for equality to 0?
此外,这个讨论对于浮标上的奇怪的精度问题非常有帮助:Why the result is different for this problem?
即下方会产生错误:
double d1 = 1.000001; double d2 =0.000001; Console.WriteLine((d1-d2)==1.0);
C++:支持 std::complex AND double 的通用 if 语句
有没有比下面更聪明的方法 [...] 在某种意义上更聪明 (i) 我不想提取双精度值的 std::real 部分(这可以通过区分类型名来实现在 make_real (ii) 中,我认为可能会重载比较运算符以将它们也用于 double 与 std::complex 比较。
哦,是的。
我不认为这是一个好主意(我不喜欢复杂和浮点之间的 operator<()
的想法)但它是可能的。
您可以按如下方式添加 operator<()
bool operator< (std::complex<double> const & cd,double d)
{ return cd.real() < d; }
或者,如果您希望它更通用,
template <typename D>
bool operator< (std::complex<D> const & cd,D d)
{ return cd.real() < d; }
或者也
template <typename D1,typename D2>
bool operator< (std::complex<D1> const & cd,D2 d)
{ return cd.real() < d; }
以下是您修改的示例。
#include <iostream>
#include <complex>
#include <cmath>
bool operator< (std::complex<double> const & cd,double d)
{ return cd.real() < d; }
using namespace std::complex_literals;
template<typename number=double>
number
compute_number(const number& x,const number& y)
{ return x < 1.0 ? x : y; }
int main()
{
std::cout << "Evaluate function with double" << std::endl;
std::cout << compute_number(3.0,4.0) << std::endl;
std::cout << "Evaluate function with complex number" << std::endl;
std::cout << compute_number(3.0+2i,4.0-2i) << std::endl;
}
今天关于为什么f和Double x比f的分享就到这里,希望大家有所收获,若想了解更多关于Android Circle进度栏-显示值通常为Double Double、assertEquals(Double,Double)和assertEquals(double,double,delta)之间的Junit差异、c# – 将double与0进行比较是错误的:doubleVariable == 0?、C++:支持 std::complex
本文标签: