相关疑难解决方法(0)

在Java中保留double的精度

public class doublePrecision {
    public static void main(String[] args) {

        double total = 0;
        total += 5.6;
        total += 5.8;
        System.out.println(total);
    }
}
Run Code Online (Sandbox Code Playgroud)

上面的代码打印:

11.399999999999
Run Code Online (Sandbox Code Playgroud)

我怎么才能打印(或能够用它)11.4?

java floating-point precision double

134
推荐指数
11
解决办法
19万
查看次数

Java:为什么我们应该在现实世界中使用BigDecimal而不是Double?

在处理现实世界的货币价值时,我建议使用BigDecimal而不是Double.But我没有一个令人信服的解释,除了"通常是这样做".

你能否对这个问题嗤之以鼻?

java floating-point double bigdecimal

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

使用BigDecimal作为货币的一个现实例子明显优于使用double

我们知道使用double货币是容易出错的,不推荐使用.但是,我还没有看到一个现实的例子,BigDecimal虽然double失败了,但不能通过一些舍入来简单地修复.


注意琐碎的问题

double total = 0.0;
for (int i = 0; i < 10; i++) total += 0.1;
for (int i = 0; i < 10; i++) total -= 0.1;
assertTrue(total == 0.0);
Run Code Online (Sandbox Code Playgroud)

不计算,因为它们通过舍入(在这个例子中从0到16的小数位的任何东西)都可以解决.


涉及总结大值计算可能需要一些中间圆棒,但由于流通总货币之中USD 1e12,爪哇double(即标准IEEE双精度其15个十进制数字)仍然是足够美分事件.


涉及分工的计算通常是不精确的,即使是BigDecimal.我可以构造一个不能用doubles 执行的计算,但可以BigDecimal使用100的标度执行,但它不是你在现实中可以遇到的东西.


我没有声称这样一个现实的例子不存在,只是我还没有看到它.

我也肯定同意,使用double更容易出错.

我正在寻找的是如下方法(根据Roland Illig的回答)

/** 
  * Given an input which has three decimal …
Run Code Online (Sandbox Code Playgroud)

java floating-point currency biginteger

44
推荐指数
5
解决办法
6806
查看次数

如何在休眠时指定Double的精度?

我尝试从hibernate注释创建一个表.我需要一个Double类型的列,其长度指定为:(10,2).所以SQL语法显示如下:

... DOUBLE(10,2) ....
Run Code Online (Sandbox Code Playgroud)

我试过这样做:

@Column(length = 10, precision = 2) ...
Run Code Online (Sandbox Code Playgroud)

但是当我查看我创建的表时,没有指定Double列的长度.Hibernate是否有解决方案或是否需要手动更改表配置?

谢谢!

java hibernate jpa

31
推荐指数
4
解决办法
8万
查看次数

为什么我要求为这个面试任务返回一个数组?

我是二年级计算机科学专业的学生,​​我刚从第一次面试中回来.

基本上最后我的面试官让我写一个函数,它带有两个参数,一个以磅为单位的数量和一个税率,然后返回一个包含税额的数组.

经过一些试验和错误,我最终写了这样的东西:

public static double[] taxAmount (double pounds, double taxPercentage) {
    double taxAmount = pounds * taxPercentage/100;
    double[] taxAmountArray = new double[1];
    taxAmountArray[0] = taxAmount;
    return taxAmountArray;
}
Run Code Online (Sandbox Code Playgroud)

它工作,他似乎很高兴,我想知道为什么我需要为此任务返回一个数组?我觉得问题真的很愚蠢,阵列对这个任务没用了吗?我错过了什么吗?

java arrays

11
推荐指数
1
解决办法
980
查看次数

在Java中将Java打印到System.out

这段代码没有像我想象的那样工作.

a=-1;   
b=0.1;   
for(i=0;i<=20;i++){  
    System.out.println(i + ". x= " + a);   
    a=a+b;   
}       
Run Code Online (Sandbox Code Playgroud)

在控制台上我应该看到:

0. x= -1.0  
1. x= -0.9  
2. x= -0.8  
3. x= -0.7  
4. x= -0.6  
5. x= -0.5  
6. x= -0.4  
7. x= -0.3  
Run Code Online (Sandbox Code Playgroud)

...等等

但这是发生的事情:

0. x= -1.0  
1. x= -0.9  
2. x= -0.8  
3. x= -0.7000000000000001  
4. x= -0.6000000000000001  
5. x= -0.5000000000000001  
6. x= -0.40000000000000013  
7. x= -0.30000000000000016  
8. x= -0.20000000000000015  
9. x= -0.10000000000000014  
10. x= -1.3877787807814457E-16  
11. x= 0.09999999999999987  
12. x= 0.19999999999999987  
13. …
Run Code Online (Sandbox Code Playgroud)

java double

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

用于操纵货币的数据类型

我正在尝试决定将哪种数据类型用于财务应用程序.

我已阅读DoubleBigDecimal应该使用.我在他们之间感到困惑.在这方面的任何帮助将受到高度赞赏

java currency

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

如何为包含双字段的类实现 equals/hashCode 方法

我在包含双字段的类中覆盖了 equals 和 hashCode。我的第一种方法是在 equals 方法中使用 epsilon 测试,在 hashCode 中使用 Double.hashCode( double ),但这会导致相等的对象具有不同的哈希码;这是一个简化的示例:

public class DoubleHashTest2
{
    public static void main(String[] args)
    {
        double  base1   = .9;
        double  base2   = .7;
        Test    test1   = new Test( base1 - .1 );
        Test    test2   = new Test( base2 + .1 );

        System.out.println( test1.equals( test2 ) );
        System.out.println( test1.hashCode() );
        System.out.println( test2.hashCode() );
    }

    private static class Test
    {
        private double  dnum1;

        public Test( double dnum1 )
        {
            this.dnum1 = dnum1;
        }

        public …
Run Code Online (Sandbox Code Playgroud)

java

5
推荐指数
1
解决办法
472
查看次数

为什么在 ClickHouse 表中不鼓励浮点表示?

文档Float32并没有真正解释 的行为Float64以及不鼓励它们的原因。

我问这个问题是因为在将这些与控制台 cli 请求或 Rest 请求一起使用时,我看到了奇怪的行为。无论精度如何,发送到 clickhouse 的浮点值在最后一位都会稍微修改。

示例:1258.021545成为1258.0215453.

每次插入这些值时,最后一位数字都会更改。我不认为问题来自太高的精度值,因为这些值来自 Java 双精度数。

floating-point decimal-point clickhouse

5
推荐指数
1
解决办法
2598
查看次数

火花十进制类型精度损失

我正在测试火花十进制类型的货币量度,并在设置刻度和精度时看到一些奇怪的精度结果,如下所示。我想确保在计算过程中不会丢失任何数据,但是下面的示例不能确保这一点。谁能告诉我为什么Spark sql会发生这种情况?当前版本为2.3.0

val sql = """select cast(cast(3 as decimal(38,14)) / cast(9 as decimal(38,14)) as decimal(38,14)) val"""
spark.sql(sql).show
Run Code Online (Sandbox Code Playgroud)

这返回

+----------------+
|             val|
+----------------+
|0.33333300000000|
+----------------+
Run Code Online (Sandbox Code Playgroud)

scala apache-spark apache-spark-sql

5
推荐指数
1
解决办法
839
查看次数