把双料分成多个部分
Splitting a double into multiple parts
本文关键字:个部 更新时间:2023-10-16
正如标题所述,我想将一个多位数的双精度数分成多个部分,每个部分包含4位数字。
我已经把双精度浮点数四舍五入到最小整数,所以没有分数部分,剩下的是一个非常非常长的双精度浮点数,远远超过最大的长整数。
我需要将整数部分分成几个4位数的部分,这对于整数来说非常简单,像这样的while语句可以做到:
unsigned long long int IntegerWithSeveralParts;
unsigned short int i = 0;
unsigned int Parts[10];
while ( IntegerWithSeveralParts )
{
Parts[i] = IntegerWithSeveralParts % 10000;
IntegerWithSeveralParts /= 10000;
++ i;
}
是的,我知道这些部分的顺序是相反的,但是一个向量可以解决这个问题。问题是,我不能在浮点数和双精度数上执行模块化,这对我来说是相当大的问题。我可以将它们转换为字符串,并从中进行分割,但这非常耗时,因为这将包括使用流。
还有别的办法吗?
<cmath>
的fmod()
族函数提供了x / y
的浮点余数,其中x
和y
是该函数的两个参数
总是可以将小数部分"提升"为整数,方法是乘以10000,然后再乘以10000。这将取小数点后四位,并将其转化为整数。重复执行此操作以获得更多的4位数块。
可以使用fmod进行浮点模运算。但一个更简单的解决方案是使用stringstream将float转换为字符串,并将字符串分成最多4个长度的部分。
当您将浮点值的二进制表示转换为十进制表示(通常通过转换为文本来显示它)时,您通常会得到一系列无界的十进制数字。当您设置输出流的精度时,您可以告诉运行时库限制其显示的位数并将尾部舍入。你在这里要求的本质上是一样的,但是与输出流呈现的数字排列不同。最简单的方法是使用输出流生成任意数量的数字,然后根据需要重新排列它们:
std::string result;
std::ostring_stream out;
out << std::fixed << std::precision(12) << result;
// now fiddle with result however you'd like
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 模板-模板参数推导:三个不同的编译器三种不同的行为
- 处理多个异常集合的C++方法
- 什么时候在C++中返回常量引用是个好主意
- 给定n个元素的m个集合.在C++中找到出现在最大集合数中的元素
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 尝试通过多个向量访问变量时,向量下标超出范围
- Ardunio UNO解决了多个重叠的定时器循环
- 如何返回一个类的两个对象相加的结果
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 数到第n个楼梯的路(顺序无关紧要)
- 基于多个条件处理地图中的所有元素
- 为多个会话保留XPtr
- 如何在C++中初始化嵌套类中的2个memeber
- 运算符C++ "delete []"仅删除 2 个前值
- 具有多个参数的部分类模板专用化