相关疑难解决方法(0)

如何检查float是否具有整数值

如何检查输入值是整数还是浮点数?

假设312/100 = 3.12,这里我需要检查3.12是浮点数还是整数.

java floating-point int rounding

54
推荐指数
6
解决办法
11万
查看次数

为什么BigDecimal("5.50")不等于BigDecimal("5.5")以及如何解决这个问题?

实际上,我找到了可能的解决方案

//returns true
new BigDecimal("5.50").doubleValue() == new BigDecimal("5.5").doubleValue()
Run Code Online (Sandbox Code Playgroud)

当然,它可以通过类似的Math.abs (v1 - v2) < EPS方式进行改进,使比较更加健壮,但问题是这种技术是否可以接受或是否有更好的解决方案?

如果有人知道为什么java设计师决定以这种方式实现BigDecimal的平等,那么阅读它会很有趣.

java equals bigdecimal

49
推荐指数
3
解决办法
3万
查看次数

双重型比较器

我写了以下代码:

public class NewClass2 implements Comparator<Point>
{
    public int compare(Point p1, Point p2)
    {
        return (int)(p1.getY() - p2.getY());
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我说有两个双号,3.2 - 3.1差异应该是0.1.然而,当我将数字转换为int时,差异最终为0,这是不正确的.

因此我需要compare()返回一个double,而不是int.问题是,我的getX领域是双重的.我怎么解决这个问题?

java double casting comparator

38
推荐指数
6
解决办法
7万
查看次数

浮点算法不能产生精确的结果

我需要在Java中进行一些浮点运算,如下面的代码所示:

public class TestMain {
    private static Map<Integer, Double> ccc = new HashMap<Integer, Double>() {
      { put(1, 0.01); put(2, 0.02); put(3, 0.05); put(4, 0.1); put(6, 0.2);
        put(10, 0.5); put(20, 1.0); put(30, 2.0); put(50, 5.0); put(100, 10.0);
      }
    };

    Double increment(Double i, boolean up) {
        Double inc = null;

        while (inc == null) {
            inc = ccc.get(i.intValue());

            if (up)
                --i;
            else
                ++i;
        }
        return inc;
    }

    public static void main(String[] args) {
        TestMain tt = new TestMain();

        for (double i = …
Run Code Online (Sandbox Code Playgroud)

java floating-point

31
推荐指数
2
解决办法
3万
查看次数

为什么0.5 == 0.5f为真但0.1 == 0.1f为假?

请看以下两个代码:

public static void main(String... args)
{
   System.out.println(0.5==0.5f);
}
Run Code Online (Sandbox Code Playgroud)

输出:true

 public static void main(String... args)
 {
   System.out.println(0.1==0.1f);
 }
Run Code Online (Sandbox Code Playgroud)

输出:false

为什么会这样?

java literals

23
推荐指数
2
解决办法
7828
查看次数

为什么在Java float比较中使用Float.floatToIntBits()?

在JBox2d中,存在以下代码Vec2.equals():

@Override
public boolean equals(Object obj) { //automatically generated by Eclipse
    if (this == obj)
        return true;
    if (obj == null)
        return false;
    if (getClass() != obj.getClass())
        return false;
    Vec2 other = (Vec2) obj;
    if (Float.floatToIntBits(x) != Float.floatToIntBits(other.x))
        return false;
    if (Float.floatToIntBits(y) != Float.floatToIntBits(other.y))
        return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

我想知道float < - > int位转换函数的用途是什么,这里.这是否提供了一种解决Java浮动比较不准确问题的方法(如果可能的话)?还是完全不同的东西?我想知道它是否是epsilon方法的替代方案:

if (Math.abs(floatVal1 - floatVal2) < epsilon)
Run Code Online (Sandbox Code Playgroud)

PS.为了完整和兴趣,这里是Vec2.hashCode():

@Override
public int hashCode() { //automatically generated by Eclipse
    final int prime = 31;
    int …
Run Code Online (Sandbox Code Playgroud)

java floating-point vector box2d

19
推荐指数
2
解决办法
5587
查看次数

漂浮和双重混乱

在看到下面的代码片段的结果后,我对浮点数的行为感到困惑.

    float var1 = 5.4f;
    float var2 = 5.5f;

    if(var1 == 5.4)
        System.out.println("Matched");
    else
        System.out.println("Oops!!");

    if(var2 == 5.5)
        System.out.println("Matched");
    else
        System.out.println("Oops!!");
Run Code Online (Sandbox Code Playgroud)

输出:

Oops!!
Matched
Run Code Online (Sandbox Code Playgroud)

这是因为十进制数不能完全代表基本2二进制格式吗?或者这是因为我将float类型变量与double类型进行比较时的精度?如果是,那为什么它适用于下一个变量?

java type-conversion

9
推荐指数
2
解决办法
1089
查看次数

Float.equals(几乎)是完全无用的,我应该使用什么呢?

考虑到:

看起来像当前形式的Float.equals几乎完全没用.

我是否遗漏了某些东西,或者有时候使用Float.equals是合适的,除非你想要测试二进制相等的极其罕见的情况?

如果是这样,滚动你自己的identikit epsilon函数(如第一个链接中所推荐的那样)是否真的是完成的事情,或者是否存在这个令人难以置信的常见操作的现有包装器?

另外,Double/Float.compare是否会遇到同样的问题,或者是否存在需要epsilon的现有比较器?

(请注意,我无法将现有库从Floats更改为BigD)

java

7
推荐指数
1
解决办法
197
查看次数

是否必须知道机器架构才能编写代码?

比方说,我在Java或Python或C++编程的一个简单的问题,可能是建的阶乘的TCP/UDP echo服务或计算.我是否需要打扰架构细节,即它是32位还是64位?

恕我直言,除非我正在编写与相当低级别的东西相关的东西,否则我不必为32或64位而烦恼.我哪里错了?还是我正确的???

c++ python java 64-bit 32-bit

6
推荐指数
4
解决办法
1140
查看次数

gtest (C++) 和 nunit (C#) 中双重比较的区别

我已经将带有 gtest 测试的 c++ 项目移植到带有 nunit 测试的 ac# 项目。现在我遇到了浮点精度问题。

在 nunit 测试中我不太好(红色)

Assert.AreEqual(0.7, 7 * 0.1); 
Run Code Online (Sandbox Code Playgroud)

在 gtest 测试中,我有:

ASSERT_DOUBLE_EQ(0.7, 7 * 0.1);
Run Code Online (Sandbox Code Playgroud)

没问题(绿色)

现在的问题是为什么???

c# c++ floating-point nunit googletest

6
推荐指数
2
解决办法
1万
查看次数