正如标题所述,我想将一个多位数的双重分成多个部分,每个部分包含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;
}
是的,我知道这些部件的顺序是相反的,但是矢量可以解决这个问题。问题是,我无法对浮动和双打执行模块化,这对我来说是一件非常重要的事情。我可以将它们转换为字符串,并从中进行拆分,但这非常耗时,因为这将包括使用流。
还有别的吗?
答案 0 :(得分:2)
你总是可以通过乘以10000然后调整10000来将小数部分“提升”为整数。这将取前四个小数位并从中取出一个int。反复执行此操作以获得更多4位数块。
答案 1 :(得分:2)
来自fmod()
的{{1}}函数系列提供<cmath>
的浮点余数,其中x / y
和x
是函数的两个参数。< / p>
答案 2 :(得分:2)
您可以将fmod用于浮点模块化算术。但更简单的解决方案是使用stringstream将float转换为字符串,然后将字符串拆分成最多4个长度的片段。
答案 3 :(得分:0)
当您将浮点值的二进制表示形式转换为十进制表示形式时(通常通过转换为文本以显示它),您通常会得到一个无限的十进制数字系列。设置输出流的精度时,应告知运行时库限制显示的数字位数并使尾部变圆。你在这里要求的基本上是相同的,但是数字的排列方式与输出流的排列方式不同。最简单的方法是使用输出流生成您想要的多个数字,然后根据需要重新排列它们:
std::string result;
std::ostring_stream out;
out << std::fixed << std::precision(12) << result;
// now fiddle with result however you'd like