将双重拆分成多个部分

时间:2013-06-05 04:35:08

标签: c++ split double

正如标题所述,我想将一个多位数的双重分成多个部分,每个部分包含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;
}

是的,我知道这些部件的顺序是相反的,但是矢量可以解决这个问题。问题是,我无法对浮动和双打执行模块化,这对我来说是一件非常重要的事情。我可以将它们转换为字符串,并从中进行拆分,但这非常耗时,因为这将包括使用流。

还有别的吗?

4 个答案:

答案 0 :(得分:2)

你总是可以通过乘以10000然后调整10000来将小数部分“提升”为整数。这将取前四个小数位并从中取出一个int。反复执行此操作以获得更多4位数块。

答案 1 :(得分:2)

来自fmod()的{​​{1}}函数系列提供<cmath>的浮点余数,其中x / yx是函数的两个参数。< / 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