C++;中的小数部分
Decimal part in C++;
我正在寻找一个返回数字小数部分的函数(但不像 0.numbers),例如:
float x=12.3456;
我希望它返回:
int i=3456;
我试过了
x=x-(int)x;
i=x;
但它返回 0。
让我们一一完成这两个作业
x=x-(int)x;
i=x;
首先,您执行x=x-(int)x
这将导致x
等于0.346
。然后,您执行截断(即删除小数)x
值的i=x
,导致i
变为零。
您需要在分配给i
之前将x
乘以 1000
:
i = 1000 * x;
1000
数取决于所需的小数位数。更多的零意味着更多的数字。
补充一下Joachim Pileborg的答案:如果你真的想在你的整数中拥有所有的小数位数,你可以做这样的事情:
#include <iostream>
#include <iomanip>
#include <limits>
#include <cmath>
template <typename T>
long long fractional(T val)
{
T frac = val - std::floor(val);
long long alldigits(std::pow(10, std::numeric_limits<T>::digits10)*frac);
while (alldigits%10 == 0)
{
alldigits /= 10;
}
return alldigits;
}
int main()
{
std::cout << fractional<float>(1.0/8.0) << std::endl; // 125
std::cout << fractional<float>(1.0/3.0) << std::endl; // 333333
std::cout << fractional<double>(1.0/3.0) << std::endl; // 333333333333333
return 0;
}
活生生的例子在这里。 但该示例还显示了您遇到的问题:根据基础数据类型的数量和精度,您将获得不同数量的数字,最终难以解释。 因此,最有可能的是,获得固定数量的数字将是更好的解决方案。
你可以试试这个:
#include <iostream>
int intpart(float x) {
float b = 0;
x -= (int)x;
while (x - (int)x != 0)
x *= 10;
return (int)x;
}
int main(int argc, char const *argv[])
{
std::cout << intpart(17.5) << std::endl;
return 0;
}
相关文章:
- C++将浮点指针值舍入为小数位数
- 从给定的 I 和 D 序列中形成最小数
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 如何将部分流作为参数传递
- 使用 std::index_sequence 初始化具有固定大小数组成员的 POD 结构容器
- 计算 PI 最多 42 位小数
- 为什么我必须添加一个小数才能在C++中正确计算此数学
- 返回浮点数的小数位数
- 为什么 std::cout 打印浮点数、双精度和长双精度到相同的小数精度?
- 有没有办法修改'operator->',以便'z->im'返回复数的虚部
- 在数学上将浮点数四舍五入到 N 位小数
- 打印双精度的整个非小数部分
- 声明后,gcc 的动态大小数组是否与标准数组有效相同?
- 如何在C++中对OpenCV垫的小数进行四舍五入?
- 如何删除部分类?
- 将 int 数组转换为带有小数C++的双精度数组
- Arduino如何制作返回固定大小数组的函数
- 从浮点数中删除小数部分但保留类型的有效方法
- 分配新的零大小数组可以具有有效价值吗?
- 如何在c++中存储纬度的小数部分为4 unsigned char