Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/153.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++;十进制检查语句是否有错误? 我正在为C++课程做一些作业,而且我对C++还很陌生。我的if语句遇到了一些问题。。。我要做的是让用户输入一个时间,在0.00到23.59之间。:被一个句号替换。顺便说一句,该部分有效。然后,我将时间和分钟分开,并检查它们以确保它们处于有效的约束中。检查小时工作,但不是分钟。。。这是我的密码: minute= startTime - static_cast<int>(startTime); hour= static_cast<int>(startTime); //check validity if (minute > 0.59) { cout << "ERROR! ENTERED INVALID TIME! SHUTTING DOWN..." << endl;; return(0); } if (hour > 23) { cout << "ERROR! ENTERED INVALID TIME! SHUTTING DOWN..." << endl;; return(0); } minute=startTime-静态广播(startTime); 小时=静态播放(开始时间); //检查有效性 如果(分钟>0.59){ cout_C++_If Statement_Casting - Fatal编程技术网 0.59){ cout,c++,if-statement,casting,C++,If Statement,Casting" /> 0.59){ cout,c++,if-statement,casting,C++,If Statement,Casting" />

C++;十进制检查语句是否有错误? 我正在为C++课程做一些作业,而且我对C++还很陌生。我的if语句遇到了一些问题。。。我要做的是让用户输入一个时间,在0.00到23.59之间。:被一个句号替换。顺便说一句,该部分有效。然后,我将时间和分钟分开,并检查它们以确保它们处于有效的约束中。检查小时工作,但不是分钟。。。这是我的密码: minute= startTime - static_cast<int>(startTime); hour= static_cast<int>(startTime); //check validity if (minute > 0.59) { cout << "ERROR! ENTERED INVALID TIME! SHUTTING DOWN..." << endl;; return(0); } if (hour > 23) { cout << "ERROR! ENTERED INVALID TIME! SHUTTING DOWN..." << endl;; return(0); } minute=startTime-静态广播(startTime); 小时=静态播放(开始时间); //检查有效性 如果(分钟>0.59){ cout

C++;十进制检查语句是否有错误? 我正在为C++课程做一些作业,而且我对C++还很陌生。我的if语句遇到了一些问题。。。我要做的是让用户输入一个时间,在0.00到23.59之间。:被一个句号替换。顺便说一句,该部分有效。然后,我将时间和分钟分开,并检查它们以确保它们处于有效的约束中。检查小时工作,但不是分钟。。。这是我的密码: minute= startTime - static_cast<int>(startTime); hour= static_cast<int>(startTime); //check validity if (minute > 0.59) { cout << "ERROR! ENTERED INVALID TIME! SHUTTING DOWN..." << endl;; return(0); } if (hour > 23) { cout << "ERROR! ENTERED INVALID TIME! SHUTTING DOWN..." << endl;; return(0); } minute=startTime-静态广播(startTime); 小时=静态播放(开始时间); //检查有效性 如果(分钟>0.59){ cout,c++,if-statement,casting,C++,If Statement,Casting,浮点运算(float和double)本质上是模糊的。在发送到流的舍入表示中,小数点后面总是有一些数字是您看不到的,并且比较也可能是模糊的,因为您习惯于使用的表示(十进制)不是计算机使用的(二进制) 将时间表示为int-hours和int-minutes,您的问题就会消失。大多数库以滴答(通常为秒或微秒)为单位测量时间不要提供子刻度分辨率。你最好模仿它们。比较浮点数容易失败,因为很少有浮点数可以精确地用基数2表示。总是有可能两个不同的数字在不同的方向上取整 最简单的解决方法是在比较的数字上加上一个

浮点运算(
float
double
)本质上是模糊的。在发送到流的舍入表示中,小数点后面总是有一些数字是您看不到的,并且比较也可能是模糊的,因为您习惯于使用的表示(十进制)不是计算机使用的(二进制)


将时间表示为
int-hours
int-minutes
,您的问题就会消失。大多数库以滴答(通常为秒或微秒)为单位测量时间不要提供子刻度分辨率。你最好模仿它们。

比较浮点数容易失败,因为很少有浮点数可以精确地用基数2表示。总是有可能两个不同的数字在不同的方向上取整

最简单的解决方法是在比较的数字上加上一个非常小的模糊因子:

if (minute > 0.59 + epsilon)
请参阅。

永远不要使用double(或float)存储两个整数值,使用整数和小数部分作为分隔符。小数数据类型不够精确,因此可能会产生错误的结果(在四舍五入的情况下)

在您的情况下,一个好的解决方案是使用结构(或对)甚至整数

对于integer,您可以使用then倍数的mod或div来提取实际值。例如:

int startTime = 2359;
int hour = startTime / 100;
int minute = startTime % 100;

尽管使用struct,代码看起来更简单,更容易理解(和维护)。

您无法与
0.59
这个值进行精确比较 无法在计算机中表示。您正在进行比较 非常接近于
0.59
的某个东西 非常接近
0.59

就我个人而言,我根本不会以这种方式输入时间。这是一个非常重要的问题 更好的解决方案是学习如何使用
std::istream
来 读取值。但是如果您坚持,并且您有
startTime
as 您的
加倍
,需要将其乘以
100.0
(以便 您感兴趣的值中有一个是整数,可以是 精确表示),然后将其四舍五入,然后将其转换为 整数,并在 整数来提取您的值。大致如下:

assert( startTime >= 0.0 && startTime <= 24.0 );
int tmpTime = 100.0 * startTime + 0.5;
int minute = tmpTime % 100;
int hour = tmpTime / 100;

断言(startTime>=0.0&&startTime使用
double
,而不是
int
。请注意,
家庭作业
标记已被弃用。抱歉,我键入了错误的标记。请再次查看:dsimple put。不要使用浮点数进行时间计算。将分钟和小时分别存储在
int
变量中。请阅读我同意wi这是你的第一句话,但它表示的类型是从某个时代开始的天数,在一个
中,小数部分用于表示时间,这似乎相当普遍。(我不是说这是个好主意,而是说它很普遍。)@JamesKanze:AFAIK,当从某个纪元开始表示时,小数部分通常仅用于表示毫秒(或微秒),在大多数情况下,这是一个可以接受的近似值。不是在Excel中。我使用过Excel插件,时间以双精度表示,表示天数(和小数天)从1900年1月1日开始。可能是由于Excel的影响,这种格式在某些环境中似乎很普遍。Always是一个强有力的词。我敢打赌他不会对
1.50
2.25
@JamesKanze有任何问题。你只在所有情况下正确率为0.0000176%。我认为“Always”限定条件。@MrLister-如果您选择一个随机的十进制数字序列,当转换为
double
时,该序列不会溢出,那么您将有一个可以精确表示为
double
的值的概率为0。作为讨论的问题,我不会将浮点算术描述为“模糊”。它定义明确,可复制。正如你所说,用十进制思考会导致误解。也就是说,它是十进制数和浮点数之间的类比(假设二进制浮点数表示)这是模糊的。@PeteBecker:那不是真的。但是任何表示法都有一些可以精确表示的值(甚至是十进制)。但即使是十进制也不能精确表示所有的值。试着用十进制表示1/3。我相信“闲聊”(但多年前的课堂记忆是模糊的)通过将浮点数保留为两个整数(“分子”和“分母”)使用精确表示。