java - 浮点 setter 设置任意分数

标签 java types

这是我的“ProjectEntity”类中的代码部分(我在其中使用 hibernate 进行 SQL 调用)

@Column(name = "BUDGET")
private float budget;

public float getBudget() {
return budget;
}

public float setBudget(float budget) {
this.budget = budget;
}

在另一个类中,我这样称呼我的 setter:

newProject.setBudget(Float.parseFloat(strTotalAmount.substring(0, strTotalAmount.indexOf(" (hrs)"))) * m);

这里有一个名为 strTotalAmount 的字符串,它看起来像这样:“51.0 (hrs)”。所以它基本上从字符串中获取值 51.0 并乘以等于 47.6 的浮点“m”,到这里一切都很好。它应该将该值设置为 2427.6,但它设置为 2427.5999。可能是什么问题?

注意:最初在 ProjectEntity 中“预算”值是双倍而不是 float 。我已经把它改成 float 了。但一切都没有改变。

最佳答案

如果您需要精确的数字, float 是 Java 中的近似值,尤其是在使用 BigDecimal 处理金钱时。

public class FloatTest {
    public static void main(String[] args) {
        BigDecimal f1 = new BigDecimal("51.0");
        BigDecimal f2 = new BigDecimal("47.6");

        System.out.println(f1.multiply(f2));
    }
}

关于java - 浮点 setter 设置任意分数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20968711/

相关文章:

c# - 原始类型性能

java - 为什么没有 BigDecimal.setPrecision() 方法?

java - Gradle:为 Java 和 Android 构建不同的 jar

types - mli 文件和 ml 文件中的签名之间的 OCaml 共享结构

javascript - 为什么 Javascript 仅对已分配的字符串进行字符串连接的类型转换?

Python:让 scipy 使用 numpy.float128 而不是 numpy.float64?

c++ - 在初始化的未知大小数组中使用 sizeof() - C++

java - Apache POI 字体问题

java - (Java)计算方法的递归调用(但始终是一个新实例)

java - 找不到 ArrayList