当前位置: 首页 > 面试题库 >

为什么我看到一个double变量初始化为某个值,如21.399999618530273 21.4?

梁勇
2023-03-14
问题内容
double r = 11.631;
double theta = 21.4;

调试器中,这些显示为11.631000000000000和21.399999618530273

如何避免这种情况?


问题答案:

这些精度问题归因于浮点数的内部表示,您无法做很多事情来避免它。

顺便说一句,至少在使用现代C ++编译器时,在运行时打印这些值通常仍会导致正确的结果。对于大多数操作而言,这并不是什么大问题。



 类似资料:
  • print语句会导致以下编译时错误, 局部变量f可能尚未初始化 如果Java中的原语已经有一个默认值(float=0.0f),为什么我需要定义一个呢? 所以,这是有效的 谢谢大家!

  • 为什么未初始化的变量打印一个奇怪的负值?

  • 我遇到了一个有趣的问题,我不明白发生了什么: 据我所知,我提供的单个整数参数可以解释为使用参数调用构造函数,也可以解释为使用初始化列表的构造函数。似乎只有当我提供左值时才调用initialiser_list构造函数,但当我提供r-value(至少是文字)时,构造函数。为什么会这样? 这也意味着: 结果仅为大小为1的向量; 结果是一个大小为num\u元素的向量,但我认为应该避免这种初始化,因为偶尔会

  • 问题内容: 我有一个Bean,其中有一个字段“ CustAmount”,该字段为double,我尝试测试该Bean,但我似乎不明白这一点:当我在本地计算机上运行时,实例化时它将初始化为0.0。当我在linux测试环境中运行相同的代码时,它保持为空。因此,如果我将CustAmount作为null发送到后端,则会得到一些数据,但是如果我将CustAmount作为0.0发送,则查询将在0.0的基础上完成

  • 问题内容: 每次尝试编译时,它表明变量可能未初始化。我认为可能是问题所在。告诉我如何在中运行2条语句。 问题答案: d1不在else块中且仅在if或else if块中初始化,因此,如果if()和elseif()块中的所有语句均为false,则控制器进入else块,而d1仍然不是初始化。因此,当您尝试在system.out.println()中访问它时,编译器正确地抛出该错误。您可能想在一开始将值初

  • 问题内容: 我正在寻找一种声明相同类型和相同值的多个变量的干净有效的方法。现在我有: 但是我正在寻找类似的东西: 这是可以在Java中完成的事情吗?牢记效率。 问题答案: 这应该适用于不可变的对象。对于可变对象没有任何意义,例如: 所有变量将指向同一实例。在这种情况下,你可能需要的是: 或者最好还是使用数组或Collection。