a; cout>b; c=b/a; 结果=c*100; cout,c++,calculator,C++,Calculator" /> a; cout>b; c=b/a; 结果=c*100; cout,c++,calculator,C++,Calculator" />

如何将数字存储在C++;没有小数被截断? 我正在编写一个C++的简单百分比计算器。我是一个初学者,我不知道如何存储小数而不删除它们。如果我输入任何导致小数点的输入,它将变为0,并扰乱其余的计算 #include <iostream> using namespace std; int main () { int a; int b; int c; int result; cout << "Enter your goal: "; cin >> a ; cout << "Enter the amount achieved: "; cin >> b ; c = b / a; result = c * 100; cout << result; cin.get(); } #包括 使用名称空间std; int main() { INTA; int b; INTC; int结果; cout>a; cout>b; c=b/a; 结果=c*100; cout

如何将数字存储在C++;没有小数被截断? 我正在编写一个C++的简单百分比计算器。我是一个初学者,我不知道如何存储小数而不删除它们。如果我输入任何导致小数点的输入,它将变为0,并扰乱其余的计算 #include <iostream> using namespace std; int main () { int a; int b; int c; int result; cout << "Enter your goal: "; cin >> a ; cout << "Enter the amount achieved: "; cin >> b ; c = b / a; result = c * 100; cout << result; cin.get(); } #包括 使用名称空间std; int main() { INTA; int b; INTC; int结果; cout>a; cout>b; c=b/a; 结果=c*100; cout,c++,calculator,C++,Calculator,查看基本的数字类型: int -> integer numbers float -> single precision floating point numbers double-> double precision floating point numbers 对于该操作,您需要浮点数或双点数 查看一些有用的文档: 您应该使用“float”或“double”类型来处理小数点 代码的一个快速修复方法是将这些int类型变量更改为“float” 我也建议你多读一些关于C++

查看基本的数字类型:

int   -> integer numbers
float -> single precision floating point numbers
double-> double precision floating point numbers
对于该操作,您需要浮点数或双点数

查看一些有用的文档:

您应该使用“float”或“double”类型来处理小数点

代码的一个快速修复方法是将这些int类型变量更改为“float”


<>我也建议你多读一些关于C++的文章,比如这个帖子

你可能想用浮点运算,比如:

double c = static_cast<double>(b) / a;
尝试此操作(将
100相乘,然后将
b
除以
a
):

#包括
使用名称空间std;
int main()
{
INTA;
int b;
INTC;
int结果;
cout>a;
cout>b;
c=b/a;
结果=b*100/a;

若你们不需要一个完美的四舍五入结果,最简单的方法是先乘以100,然后除以a

result = (b*100)/a;
如果需要舍入值,可以先将所有bei 10相乘,然后手动舍入

result = (((b*10*100)/(a*10))+5)/10
这句话可以缩短,但我保持这种方式,使它更容易理解


最简单的方法是使用双精度值而不是整数。但我不知道这是否是因为你的紧张程度。这看起来像是一个解决方案由于错误的原因而起作用。就像@MikeCAT在他的回答中说的,如果你先乘以100,它“起作用”(即,你得到的结果不是0)虽然这看起来像一个解决方案,但事实并非如此,特别是因为乘法应该是可交换的,对吗?因子的顺序改变答案是没有意义的。它不应该改变

它有效,对吗? 嗯,是的,也不是。你问题中的真正问题(就像其他人所说的)是你没有正确使用数据类型。据我所知,你没有太多编程经验,这很酷。欢迎编程!计算机是哑的,当我说“哑”时,我的意思是,哦,天哪,你是有史以来最笨的机器

一个数字并不总是一个数字 正如其他答案所提到的,在编程中有两种主要的处理数字的方法(计算机太笨了,需要告诉它们使用哪一种):整数和浮点。整数(正如你可能知道的)代表集合
{0,1,-1,2,-2,…}中的数字
。它们不能表示有理数。浮点数(或
float
s)表示有理数,精确到一定程度。浮点数背后的数学有点复杂(我肯定不是专家),但基本上,它们允许您表示小数点以下的有理数(由于计算机内存有限,不可能表示无限个小数)像其他人提到的那样,几乎只需将您可以指定的小数点数量增加一倍。因为以前内存非常有限,所以通常使用
float
,但是您可以使用
double
know,而无需太多担心,并且它将为您提供更好的计算结果。注意t有一些特定的问题,你可能会遇到与
double
s和
float
s的舍入和溢出以及各种疯狂的东西(如果你做更认真的计算,你应该读一下),但一般来说,它们对于最理性的计算来说是好的

这两种数据类型之间的区别在于,当它们转换为二进制时,它们在内存中的表示方式。计算机只理解二进制,因此所有内容都需要转换,以便能够使用它。您现在不需要知道详细信息,但从本质上讲,您选择的数据类型确实会有所不同

那我该怎么办? 好吧,你必须知道你想做什么样的计算,以及你想用它做什么。有时候,你编程的语言会自动进行这种选择(或者选择更强大的版本)对你来说,但在C++中,情况并非如此。在C和C++中,你的编程更接近于计算机理解的东西,而不是其他语言,你通常必须更具体(更仔细)。编程时,这也是为什么C和C++编程往往被认为比其他程序更困难的原因:对你来说自动化程度较低。 在您的情况下,您可能并不真正需要整数。当您使用整数时,不可能使用小数。因此,当您除法时,例如
2/3
,答案是
0
(剩余部分为
2
)-当你乘以
100
时,它仍然是
0
。我们都知道它不是真的
0
,但是计算机不能用
int
表示
0.66
。它就是不能。所以,它给你最接近的东西,那就是
0
。现在,如果你做类似
100*2/3
,那么答案就是
66.6…
,表示为
66
.6
丢失了,但答案不再是
0
。因此,它似乎“起作用”,但实际上不起作用。即使是百分比,
66%
66.66%
之间也有相当大的差异

但是,如果您使用了
double
s,情况就不同了。在这种情况下,
2/3
将是
0.6…
,当您将其乘以
100
,您将得到
66.6…
,这是正确的答案。这将与
100*2/3
的结果完全相同

把它们放在一起 因此,您的程序应该如下所示:

#include <iostream>
using namespace std;
int main ()
{
 double a;
 double b;
 double c;
 double result;
 cout << "Enter your goal: ";
 cin >> a ;
 cout << "Enter the amount achieved: ";
 cin >> b ;
 c = b / a;
 result = c * 100;
 cout << result;
 cin.get();
} 
#公司
result = (((b*10*100)/(a*10))+5)/10
#include <iostream>
using namespace std;
int main ()
{
 double a;
 double b;
 double c;
 double result;
 cout << "Enter your goal: ";
 cin >> a ;
 cout << "Enter the amount achieved: ";
 cin >> b ;
 c = b / a;
 result = c * 100;
 cout << result;
 cin.get();
}