测试一个数字是否具有小数值,而没有任何库
Testing if a number has a decimal value without any library
我需要测试一个数字在C 中是否具有小数为小数。我只想使用<iostream>
,没有其他库,但是我很好奇我使用的方法是否可以接受。如果您可以提供任何帮助,找到一种更好的方法。
#include <iostream>
int main() {
double x, y;
std::cin >> x;
int z = x;
if (x - z != 0) {
std::cout << "It's a decimal.";
}
else {
std::cout << "It's not a decimal.";
}
return 0;
}
考虑到更长的时间后,我想出了一个似乎可以接受的新功能。
double TestForDecimal(double Num) {
double z;
while (Num > 1) {
if (Num > 101) /* Increments down to 1 more quickly */ {
Num = Num - 100;
}
else if (Num > 12) { Num = Num - 10; }
else { Num--; }
}
if (Num < 1 && Num > 0) {
std::cout << "This number has a decimal value" << std::endl;
return 1;
}
else {
std::cout << "Theres no decimal" << std::endl;
return 0;
}
}
测试的两种"正确"方法:
- 用
std::fmod(x, 1.0)
隔离分数。 - 使用
floor
或ceil
或trunc
丢弃分数,例如测试x == std::floor(x)
。
是否
和一种不正确的方式:
- 铸造到积分类型将在目标类型范围之外的数字中失败(使用未定义的行为!),因此这不适用于验证不信任的输入(如果信任输入,为什么需要是验证?)
可以将流量点类型的prvalue转换为整数类型的prvalue。转换截断;也就是说,分数部分被丢弃。如果无法在目标类型中表示截短值,则行为是不确定的。
我认为您正在寻找这样的东西:
#include <iostream>
int main()
{
double a;
std::cin >> a;
if(int(a) != a)
{
std::cout << "decimal";
}
else
{
std::cout << "no decimal";
}
return 0;
}
相关文章:
- C++用于从流中读取二进制值的任何标准库
- 任何用于 boost::p roperty 树的标准库实现
- 标准库中的任何正则表达式语法是否支持 (?(定义)用于子模式参考?
- 没有外部库的任何日期的C++Int
- 除了 rand() 之外,是否有任何随机生成器库,开发人员可以手动设置种子?
- 适用于 gcc 4.8 的任何正则表达式库
- 如何在没有任何依赖库的情况下在Visual Studio中构建dll?
- 在 Cmake 中链接 libavcodec,find_library不适用于任何库
- C 中客户端代理服务器系统的任何库
- 测试一个数字是否具有小数值,而没有任何库
- 如何在没有任何库或框架工作的情况下编写驱动程序
- 如何在不导入任何库的情况下删除矢量
- 无需任何库函数即可将浮点数转换为字符串的有效方法
- 没有任何库的正弦函数
- 我们可以在不使用 c++ 中的任何库的情况下加载、显示和操作图像的矩阵吗?
- 从像素值获得RGB通道没有任何库
- 是否有任何库为非默认可构造的不可复制类型提供容器
- 是否有任何库可以确定数值是否可以转换为特定字符集中的有效、可打印且有意义的字符
- 是否有任何库支持具有EMSA-PSS编码技术和证书验证的RSASSA-PSS.
- 是否有任何库将CAD转换为SVG