- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
所以当我在 Java 中使用 Doubles 进行加法或减法时,它会给我带来奇怪的结果。以下是一些:
如果我添加 0.0 + 5.1
,它会给我 5.1
。没错。
如果我添加 5.1 + 0.1
,它会给我 5.199999999999
(重复 9
的数量可能会关闭)。错了。
如果我减去 4.8 - 0.4
,它会得到 4.39999999999995
(同样,重复的 9
可能会关闭)。错了。
起初我以为这只是用十进制值添加 double 的问题,但我错了。以下工作正常:
5.1 + 0.2 = 5.3
5.1 - 0.3 = 4.8
现在,添加的第一个数字是保存为变量的 double ,尽管第二个变量从 JTextField
中获取文本。例如:
//doubleNum = 5.1 RIGHT HERE
//The textfield has only a "0.1" in it.
doubleNum += Double.parseDouble(textField.getText());
//doubleNum = 5.199999999999999
最佳答案
在 Java 中,double
值为 IEEE floating point numbers .除非它们是 2 的幂(或 2 的幂之和,例如 1/8 + 1/4 = 3/8),否则即使它们具有很高的精度,也无法精确表示。一些浮点运算会加重这些 float 中存在的舍入误差。在上述情况下,浮点错误已经严重到足以显示在输出中。
无论是从 JTextField
解析字符串还是指定 double
文字,数字的来源是什么都无关紧要——问题在于继承浮点表示。
解决方法:
如果你知道你只有这么多小数点,那就用整数算术,然后转换为小数:
(double) (51 + 1) / 10
(double) (48 - 4) / 10
如果你必须使用 double
,你可以减少浮点错误与 Kahan Summation Algorithm .
关于java - 加减 double 会产生奇怪的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15625556/
我需要帮助返回表达式的值(表达式是函数的参数)。 这是我目前尝试过的。这只是一个随机方程的例子,我的计划是了解如何正确求解它,以便稍后将其转换为函数 sum = 0 eq = '2+4-5' stri
您好,我正在尝试计算按键时一行中多个字段的总和(我的代码将包含多行)(其中一些使用加法,一些使用减法)但由于我是新手,我对 JQuery 不太熟悉。在我的场景中,B.Salary、Rec.comm、S
所以它应该做的是能够接收一个 const char* str 并将其更改为一个 int,然后将其转换回一个字符串以供输出。但它也应该能够将这些加减在一起。我正在通过我的前两个测试,但我的添加发生了一些
这个问题在这里已经有了答案: Retain precision with double in Java (24 个回答) 关闭9年前。 所以当我在 Java 中使用 Doubles 进行加法或减法时,
Java 的开发过程中免不了与 Date 类型纠缠,准备总结一下项目经常使用的日期相关操作,JDK 版本 1.7,如果能够帮助大家节约那么几分钟起身活动一下,去泡杯咖啡,便是极好的,嘿嘿。当然,我
我将用户提供的 html 保存在数据库中,“指定或不指定”css 字体大小。 并尝试制作一个按钮来放大或减小 dom 上的字体大小,但保持相对大小。 我将变量 def_size 定义为 16px,并将
我有一个看起来很容易解决的问题,但是我不确定语法。 我需要运行 if/else 语句,但我不确定如何正确设置条件。 错误代码: if (float_a = float_b or is within +
刚开始学习 C#。我计划将它用于繁重的数学模拟,包括数值求解。问题是我在加减 double 以及进行比较时会出现精度损失。代码及其返回的内容(在注释中)如下: namespace ex3 {
我是一名优秀的程序员,十分优秀!