【问题标题】:Problem with int to float typecasting and coutingint 到 float 类型的铸造和计数问题
【发布时间】:2023-02-05 18:34:33
【问题描述】:
#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 转换为 float 并在值满足特定条件后将其除以 100。 此外,该程序不适用于点,但在出现逗号时部分起作用。

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

请不要太苛刻,我是新手。

【问题讨论】:

  • “因为 gdb 根本无法使用它”这是什么意思?这是您需要解决的主要问题
  • @463035818_is_not_a_number 调试功能不会加载
  • @whitehat 你真的需要找出 gdb 不工作的原因,但这是一个完全不同的问题。

标签: c++ casting floating-point integer


【解决方案1】:

改变

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

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

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

【讨论】:

  • 谢谢你好心的陌生人!我会尽快将此标记为解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-15
  • 2021-01-16
  • 2013-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多