将double型转换为int型,不进行截断
C++: Converting a double to an int without truncation
例如,如果我想将4.234转换为4234,实质上是删除句号。到目前为止,我已经尝试了一个数学解决方案,因为我不想做繁琐的转换到字符数组。
#include <iostream>
#include <cmath>
double convert(double numb)
{
while( (fmod(numb, 2.0) > 0.0) && (fmod(numb, 2.0) != 1.0) )
numb = numb * 10;
return numb;
}
int main(void)
{
std::cout << convert(60.49999) << "n"; //doesn't work
std::cout << convert(4.3); //works
return 0;
}
编辑:这似乎工作得很好。评论?
#include <iostream>
#include <cmath>
double convert(double numb)
{
while( (fmod(numb, 2.0) > 0.0) && !(fmod(numb, 2.0) < 1.0) )
numb = numb * 10;
return numb;
}
int main(void)
{
std::cout << convert(60.49999) << "n";
std::cout << convert(4.3);
return 0;
}
我的第二个解决方案不工作在输入608.99
First将数字转换为字符串。然后从字符串中删除点并再次将字符串转换为整数。希望这对你有帮助。
或者如果你想用数学方法,只需要将数字乘以10,直到它达到整数范围,然后将10的值检查模式,如果它是0,然后再除以10,否则保持数字是你的答案。
#include <iostream>
#include <cmath>
#include <limits>
double convert(double numb)
{
int imax = std::numeric_limits<int>::max();
while ((numb*10) <= imax)
numb = numb * 10;
int num = numb;
while ((num%10) == 0)
num = num / 10;
return num;
}
int main(void)
{
std::cout << convert(4.233999999999) << "n";
std::cout << convert(4.234) << "n";
return 0;
}
相关文章:
- C++在数学计算中将double转换为int
- 使输出流式处理运算符适用于 boost::variant<std::vector<int>、int、double 的正确方法是什么>
- 进程为包含double但不包含int的模板返回了-103741819(0xC0000005)
- 在C++中,为什么int可以使用new运算符初始化变量,而double不能
- 错误:"int pow(double,int)"与上一个声明int pov(double a,int
- 重载函数 int vs double
- 如何修复 E2015 "ambiguity between pow(double,double) and pow(float,int)"
- 未定义模板'std::__1::function<int (double, double, double, double)>'的隐式实例化
- C++ - extern int (double)
- 在向量中存储模板化对象(在<int><double>单个向量中存储类、类)
- 有没有办法<int><double>在使用 C++11 函数调用期间自动将"向量"提升为"向量"?
- 获取系统时间(以毫秒为单位)作为int/double
- 如何使用非法名称(例如 "int double = 0")声明变量?
- 从文件中读取数据类型string, int double.将每一行数据放入对象向量中
- c-string和(int,double,float)之间的动态分配
- 英特尔C++错误:"pair"不是非静态数据成员或类"std::pair<const int, double>"的基类
- C/ c++: do内置对象,如' int ' ' double '在程序运行期间始终保持在内存中的确切位置
- 一个如何实现string和long, int, double模板函数的建议
- 对于最简单的类型,我应该使用boost::optional来表示可以为null的int double等吗
- 映射和节点,错误智能感知:不存在从"const std::pair<const int, double>"到"Node"的合适用户定义转换