相关疑难解决方法(0)

为什么这个精度失败的例子显示双精度而不是浮点数?

还有,为什么浮点不应使用货币的操作和可爱的例子给出的SO的大讨论在这里从Bloch的Effective Java的.

我正在玩这个,发现一些奇怪的东西.如果数字是双倍的:

System.out.println(1.03d - .42d); 
//prints out 0.6100000000000001.
Run Code Online (Sandbox Code Playgroud)

但是,如果数字是浮点数:

System.out.println(1.03f - .42f); 
//prints out 0.61.
Run Code Online (Sandbox Code Playgroud)

为什么这对浮子也不会以同样的方式失败?两种类型都容易出现同样的问题,但是导致行为差异的原因是什么?

java floating-point double floating-point-precision

0
推荐指数
1
解决办法
219
查看次数

将布尔值转换为双精度值的快速方法

我需要在java中将double转换为boolean。它在我的应用程序中经常发生,它对应用程序的性能具有至关重要的影响。有什么方法可以重写此方法以使其更快?我需要使用双精度数进行操作,因为精度是必要的,但我不保存双精度数,而是只保存布尔值(当数据只能为 0 或 1 时)。代码在这里:

    public static double booleanToDouble(boolean b) {
        if (b) {
            return 1;
        }
        return 0;
    }
Run Code Online (Sandbox Code Playgroud)

在我看来,这不是 XY 问题。50 000 000 行数据的整个应用程序运行需要 3 秒。通过这种转换,时间大约会增加到 5 秒。所以这个转换需要两秒钟,几乎是整个应用程序运行的一半。

java double casting boolean

-1
推荐指数
1
解决办法
2692
查看次数

从 int64 转换为 float64 是否安全?

据我所知 int64 可以在 Go 中的 float64 中转换,语言允许使用float64(some_int64_variable),但我也知道并非所有 64 位有符号整数都可以用 double 表示(因为 IEE754 近似值)。

我们有一些代码可以使用美分接收商品的价格int64并执行类似的操作

const TB                    = 1 << 40

func ComputeSomething(numBytes int64) {
    Terabytes := float64(numBytes) / float64(TB)
Run Code Online (Sandbox Code Playgroud)

我想知道这有多安全,因为并非所有整数都可以用双精度表示。

go ieee-754

-1
推荐指数
2
解决办法
169
查看次数

为什么这个程序会出现故障?

我从 8 月 14 日开始学习编程,并选择了 C 作为开始。

我写了这个程序,它可以工作,但它出现故障。它只允许我输入第一个值(贷款金额),立即开始计算并为付款提供零值。

请告诉我我犯过的错误。这是源代码:

#include<stdio.h>
int main(void)
{
    float a, b, c, d, e, f, g;

    printf("enter amount of loan:\n");
    scanf("%.2f",&a);

    printf("enter interest rate:\n");
    scanf("%.2f",&b);

    printf("enter monthly payment:\n");
    scanf("%.2f",&c);

    d=a*(1+b/100.00f);
    e=d-c;
    f=e-c;
    g=f-c;

    printf("balance remaining after first payment:%.2f\n",e);
    printf("balance remaining after second payment:%.2f\n",f);
    printf("balance remaining after third payment:%.2f\n",g);

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

示例运行如下:

enter amount of loan:
1000
enter interest rate:
enter monthly payment:
balance remaining after first payment:0.00
balance remaining after second payment:0.00
balance remaining …
Run Code Online (Sandbox Code Playgroud)

c floating-point

-1
推荐指数
1
解决办法
54
查看次数

浮动到Int转换

我正在读"浮动"数字,最多2位小数,如下所示:

122
122.3
122.34
Run Code Online (Sandbox Code Playgroud)

并需要通过乘以将它们转换为整数值(想象存储美元/美分)

int i;
double d;

scanf( "%lf", &d );

i = d * 100;
Run Code Online (Sandbox Code Playgroud)

例如18.56将被转化为1855

有没有办法将值读取为double并将其正确转换为int?

TIA

c c++

-2
推荐指数
1
解决办法
2542
查看次数

为什么float在Python/PHP/Javascript和Java/C#之间表现不同

10年后,我(重新)学习Java,我正在编写简单的代码,以便检查语法并验证简单的行为.我正在使用数字类型,我不明白为什么浮点数在Java(以及后面验证的C#)中的行为与Python(或其他脚本语言,如JavaScript或PHP)不同.关键在于,根据我的知识,当精度很重要时,浮点数是不可靠的,而我想到的最简单的例子之一就是总和:

float(0.1) + float(0.2)
Run Code Online (Sandbox Code Playgroud)

不同于人们所期望的不是float(0.3),但float(0.30000000000000004)由于"幕后问题".所以,在我的虚拟Java代码中,我写道:

float wrongResult = 0.1f + 0.2f;
if (wrongResult != 0.3f) {
    System.out.println("float sucks");
}
else {
    System.out.println("float works");
}

double rightResult = 0.1 + 0.2;
if (rightResult != 0.3) {
    System.out.println("double sucks");
}
else {
    System.out.println("double works");
} 
Run Code Online (Sandbox Code Playgroud)

但输出令人惊讶:

float works
double sucks
Run Code Online (Sandbox Code Playgroud)

这让我很疯狂,因为double是64位类型而float只是32位类型,所以我期望相反的结果,因为double应该更精确.所以我的困境是:为什么像Python,PHP和Javascript这样的脚本语言在某种程度上表现得像Java和C#这样的编译语言表现不同?

c# python java floating-point precision

-2
推荐指数
1
解决办法
432
查看次数

在Java中将美元转换为美分的最准确方法是什么

在Java中,将Double值的Dollar转换为cents的美分的最佳方法是什么。目前,我使用以下方法:

Double cents = new Double(dollar*100);
int amount = cents.intValue();
Run Code Online (Sandbox Code Playgroud)

这种方法有多精确?有没有更好的方法可以做到这一点。

java double currency

-2
推荐指数
1
解决办法
2979
查看次数