在 C++ 中将 class return 分数作为小数的问题
Issues having a class return a Fraction as a decimal in C++
我对 C++ 有点陌生(我断断续续地学习了几个月),正在尝试制作一个计算器应用程序。我通过指南了解了该语言的工作原理。
我对分数使用 class - 我的成员变量在 private 下,函数(set、get 等)在 public 下。我遇到的问题是我的一个功能 - 目的基本上是 return 所述分数的十进制形式。我可以直接在 Main 中进行数学运算,即使不使用 setprecision 也始终输出小数,效果会很好。
然而,每当我在 class 函数中使用相同的数学运算 - 它总是发布第一。
我可能在某个地方犯了错误,但我似乎找不到它,希望你们这些好人能伸出援手:D
这是我的主要 CPP 文件
//
// main.cpp
// Calculator
//
// Created by Bryan Douglas on 2017-03-30.
// Copyright (c) 2017 Bryan Douglas. All rights reserved.
//
#include "Fraction.h"
#include <iostream>
#include <string>
int main(int argc, const char * argv[]) {
Fraction fiftyoverhundred(50, 100);
std::cout << "The decimal of the fraction you have entered is " << fiftyoverhundred.getDecimal() << std::endl;
}
这是我的分数头文件
//
// Fraction.h
// Calculator
//
// Created by Bryan Douglas on 2017-03-30.
// Copyright (c) 2017 Bryan Douglas. All rights reserved.
//
#ifndef Calculator_Fraction_h
#define Calculator_Fraction_h
class Fraction {
private:
float m_numerator = 0;
float m_denominator = 0;
public:
Fraction(int numerator, int denominator);
~Fraction();
void setNumerator(int NumeratorInput) { m_numerator = NumeratorInput;};
int getNumerator() { return m_numerator;};
void setDenominator(int DenominatorInput) { m_denominator = DenominatorInput;};
int getDenominator() { return m_denominator;};
float getDecimal() {return (float)m_numerator / (float)m_numerator;};
};
#endif
最后,这是我的 Fraction CPP 文件
//
// Fraction.cpp
// Calculator
//
// Created by Bryan Douglas on 2017-03-30.
// Copyright (c) 2017 Bryan Douglas. All rights reserved.
//
#include "Fraction.h"
#include <stdio.h>
Fraction::Fraction(int numerator, int denominator)
{
m_numerator = numerator;
m_denominator = denominator;
}
Fraction::~Fraction()
{
}
我知道我的编码标准和术语可能不够专业,但我喜欢在功能经过测试并按计划工作后修复这些标准和术语。
提前致谢!
您的 getDecimal
有误:
float getDecimal() { return (float)m_numerator / (float)m_numerator; };
分子除以分子没有多大意义。更改为:
...
float getDecimal() { return (float)m_numerator / (float)m_denominator; };
....
并且您的输出将符合预期:
The decimal of the fraction you have entered is 0.5
我对 C++ 有点陌生(我断断续续地学习了几个月),正在尝试制作一个计算器应用程序。我通过指南了解了该语言的工作原理。
我对分数使用 class - 我的成员变量在 private 下,函数(set、get 等)在 public 下。我遇到的问题是我的一个功能 - 目的基本上是 return 所述分数的十进制形式。我可以直接在 Main 中进行数学运算,即使不使用 setprecision 也始终输出小数,效果会很好。
然而,每当我在 class 函数中使用相同的数学运算 - 它总是发布第一。
我可能在某个地方犯了错误,但我似乎找不到它,希望你们这些好人能伸出援手:D
这是我的主要 CPP 文件
//
// main.cpp
// Calculator
//
// Created by Bryan Douglas on 2017-03-30.
// Copyright (c) 2017 Bryan Douglas. All rights reserved.
//
#include "Fraction.h"
#include <iostream>
#include <string>
int main(int argc, const char * argv[]) {
Fraction fiftyoverhundred(50, 100);
std::cout << "The decimal of the fraction you have entered is " << fiftyoverhundred.getDecimal() << std::endl;
}
这是我的分数头文件
//
// Fraction.h
// Calculator
//
// Created by Bryan Douglas on 2017-03-30.
// Copyright (c) 2017 Bryan Douglas. All rights reserved.
//
#ifndef Calculator_Fraction_h
#define Calculator_Fraction_h
class Fraction {
private:
float m_numerator = 0;
float m_denominator = 0;
public:
Fraction(int numerator, int denominator);
~Fraction();
void setNumerator(int NumeratorInput) { m_numerator = NumeratorInput;};
int getNumerator() { return m_numerator;};
void setDenominator(int DenominatorInput) { m_denominator = DenominatorInput;};
int getDenominator() { return m_denominator;};
float getDecimal() {return (float)m_numerator / (float)m_numerator;};
};
#endif
最后,这是我的 Fraction CPP 文件
//
// Fraction.cpp
// Calculator
//
// Created by Bryan Douglas on 2017-03-30.
// Copyright (c) 2017 Bryan Douglas. All rights reserved.
//
#include "Fraction.h"
#include <stdio.h>
Fraction::Fraction(int numerator, int denominator)
{
m_numerator = numerator;
m_denominator = denominator;
}
Fraction::~Fraction()
{
}
我知道我的编码标准和术语可能不够专业,但我喜欢在功能经过测试并按计划工作后修复这些标准和术语。
提前致谢!
您的 getDecimal
有误:
float getDecimal() { return (float)m_numerator / (float)m_numerator; };
分子除以分子没有多大意义。更改为:
...
float getDecimal() { return (float)m_numerator / (float)m_denominator; };
....
并且您的输出将符合预期:
The decimal of the fraction you have entered is 0.5