gpt4 book ai didi

c - 如何确保以 2 位小数输入的浮点变量保留其精确值

转载 作者:行者123 更新时间:2023-11-30 20:44:47 24 4
gpt4 key购买 nike

有什么方法可以确保用户输入的浮点变量(小数点后有 2 位小数)保留其精确值,而不是丢失精度?

这是示例:我想四舍五入float小数点后有 50 个数字,如下所示

Before rounding = 0.70999997854232788085937500000000000000000000000000

对此:

After rounding = 0.71000000000000000000000000000000000000000000000000

当我想比较 float 时,我感到很困惑在这样的情况下的数字:

== Program Start==
Input : 0.71

/* program logic */
if (input == 0.71) {
printf("True !");
} else {
printf("False !");
}

Output : False !
==Program End==

输出为False !并将永远是False !因为用户输入的真实值为0.70999997854232788085937500000000000000000000000000 ,而不是0.71000000000000000000000000000000000000000000000000

有什么办法可以舍入 float值这样?我在这里读到了有关 float 潜在不准确的信息:

但是,这些并不能回答我的问题。如果我使用 ceilf(input * 100) / 100函数,它将输入 0.71进入0.71000printf() d 使用%.5f格式 - 这似乎有效。但是当我用 %.50f 打印时,实际输入值显示为 0.709999978542327880859375 。因此,我无法与我的情况下的该值进行比较。

那么,如果浮点永远不可能准确,那么上面的程序逻辑有什么技巧可以得到 true在该条件下返回值?

最佳答案

所有用户输入都以文本形式出现。检查它的最简单(也可能是最安全)的方法是在转换为数字之前将其作为字符串进行比较:

if (strcmp("0.71", input) == 0) {
printf("True !");
} else {
printf("False !");
}

当然,如果您想检查除平等之外的其他内容,这可能对您来说无法接受:)

另一点是,您对固定数字感兴趣,而不是这里的 float - 但将它们与实际整数混淆了。如果您想要使用百分之一,那么使用百分之的整数...例如,考虑金钱 - 而不是使用 float (或double)来存储美元的金额(例如 7.61 美元),使用 int (或者,上帝保佑你,long) 存储美分(例如 761 欧元)。

同样地,再举个例子,如果你正在计算时间,并且需要千分之一秒的精度,那么就使用整数毫秒,而不是 float 秒。

这将完全回避您的整个问题,并且还可能使您的程序更快......

关于c - 如何确保以 2 位小数输入的浮点变量保留其精确值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38575691/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com