【发布时间】:2011-05-16 01:15:23
【问题描述】:
嘿,所以我正在制作一个函数,它返回小数位数、整数或总数,但无法使用以下任何一种方式使其工作:
乘以一个非常大的数字(例如 100 亿)不起作用,因为计算机存储小数的方式不准确,因此 2.3 2.2999575697
'如果未设置为实际小数位数,则为 0' 个字符
那么我现在该怎么办?有人请帮忙 =( 谢谢!
如果你想看看我的将 numb 转换为字符串的函数,那就是:
////////////////////// Numbs_Digits ////////////////////////////////////////////////
template<typename T>
int Numbs_Digits(T numb, int scope)
{
stringstream ss(stringstream::in| stringstream::out), ss2(stringstream::in| stringstream::out);
unsigned long int length= 0;
unsigned long int numb_wholes;
ss2 << (int)numb;
numb_wholes = ss2.str().length(); ss2.flush();
bool all= false;
ss.precision(11); // HOW DO I MAKE THE PRECISION NUMBER THE NUMBER OF DECIMALS?
switch(scope){
case ALL: all = true;
case DECIMALS: ss << fixed << numb;
length += ss.str().length()- (numb_wholes +1); // +1 for the "."
if(all!= true) break;
case WHOLE_NUMBS:
length += numb_wholes;
if(all!= true) break;
default: break;}
return length;};
【问题讨论】:
-
与其给我们你的示例代码,如果你能更清楚地描述问题可能会更好。请给出一些数字示例和您期望的结果。
-
从您之前的问题来看,我建议您阅读浮点的实际工作原理。然后你就会明白为什么“双精度数中的小数位数”没有多大意义。