int 到 float 类型转换和 couting 的问题

Problem with int to float typecasting and couting

提问人:whitehat 提问时间:2/5/2023 最后编辑:whitehat 更新时间:2/5/2023 访问量:77

问:

#include <iostream>
 
using namespace std;
 
int main()
{
    int nominals[15] = {50000, 20000, 10000, 5000, 2000, 1000, 500, 200, 100, 50, 20, 10, 5, 2, 1};
    float numer;
    cin>>numer;
    numer = numer * 100;
    int numer2 = (int)numer;
    while(numer2 != 0)
    {
        for(int i = 0; i<15; i++)
        {
            if(numer2 >= nominals[i])
            {
                numer2 = numer2 - nominals[i];
                if(nominals[i] >= 100)
                {
                    cout<<nominals[i] / 100<<" ";
                }
                else
                {
                    float nominal = nominals[i] / 100;
                    cout<<nominal<<" ";
                }
                i--;
            }
        }
    }
}

基本上,我在这里尝试的是将给定的数字与表名义值中的值分开。当值为 >= 100 时,它可以正常工作。但是,当值< 100 时,它根本不起作用,至少它不会限制它。然而,我无法调试它,因为 gdb 根本无法使用它。 请注意在 main() 函数的第一部分进行的转换,并将 int 转换为浮点数并在值满足特定条件后将其除以 100。 此外,该程序不使用点,但当存在逗号时,该程序部分工作。

到目前为止,我已经尝试完全重写代码,在不同的平台上进行测试,但无济于事。我不知道如何让它工作,这就是我在这里的原因。

拜托,不要太苛刻,我是新手。

C++ 强制转换 浮点 整数

评论

2赞 463035818_is_not_an_ai 2/5/2023
“因为 GDB 根本无法使用它”这意味着什么?这是您需要解决的主要问题
0赞 whitehat 2/5/2023
@463035818_is_not_a_number调试功能无法加载
0赞 john 2/5/2023
@whitehat 你真的需要找出为什么 gdb 不起作用,但这是一个完全不同的问题。
0赞 phuclv 2/5/2023
这回答了你的问题吗?C++。将 1 除以任意数字得到 0
0赞 Pepijn Kramer 2/5/2023
如果不将整数与浮点数混合,可能会有更好的结果。你知道 100 是整数,100.0f 是浮点数,100.0 是双精度,对吧?

答:

0赞 john 2/5/2023 #1

改变

float nominal = nominals[i] / 100; // integer division

float nominal = nominals[i] / 100.0; // floating point division

将一个整数除以另一个整数总是会产生另一个整数(除法的任何小数部分都会被丢弃)。