这样的除法,如何实现
4字节无符号整数,表示,盘的存储容量,大于1MB,显示XXX.XXX MB,大于1KB乎 显示XXX.XXX KB
小于1K,显示 XXXX.XXX By
n/1024.0
是不是比 n/1024,
要耗时很多,
如果很多,则不用 n/1024.0 实现
另 用 sprintf(s, "%d.%d MB" n/(1024*1024), (n%(1024*1024))/1024);
求出的值与用 n/(1024*1024*0.1)
有很大出入,
问题点数:50、回复次数:8Top
1 楼jamesfancy(▲) 边城狂人 <Java|C++] (★)回复于 2005-09-22 00:13:49 得分 10
另 用 sprintf(s, "%d.%d MB" n/(1024*1024), (n%(1024*1024))/1024);
求出的值与用 n/(1024*1024*0.1)
当然会有很大的出入了
n / (1024 * 1024) 与 n / (1024 * 1024 * 0.1) 就是十倍之差
n % (1024 * 1024) / 1024 是将余数除以 1024,不知道你是何用意。Top
2 楼K()回复于 2005-09-22 00:15:40 得分 5
判断一下N的大小。
if (n<1024)
bytes;
else
if (n<1024*1024)
KB;
else
MB;
sprintf(s, "%d.%d MB" n/(1024*1024), (n%(1024*1024))/1024);
n%(1024*1024)/1024这里会取整的,你直接除就可以了。
float ratio=n/1024.0/1024.0;
Top
3 楼zhouhuahai(道号"虚无")回复于 2005-09-22 09:16:35 得分 10
4字节无符号整数,表示,盘的存储容量,大于1MB,显示XXX.XXX MB,大于1KB乎 显示XXX.XXX KB
小于1K,显示 XXXX.XXX By
用移位操作比除法快得多(虽然有很多除法在内部会转化成移位):
除以1024就是右移10位.......Top
4 楼fjm_520(蓝)回复于 2005-09-22 09:27:55 得分 10
楼上说中要害Top
5 楼deping_chen(小平)回复于 2005-09-22 10:16:45 得分 5
printf("%dM, %dK, %dB", n>>20, (n&0xFFFFF)>>10, (n&0x3FF));Top
6 楼liulibo11119(跑)回复于 2005-09-22 15:39:43 得分 0
谢谢各位,已实现了
void mmi_mydata_utils_convertToStrSize(const U32 ulSize, char *spStr)
{
U32 n1 = 0;
U32 n2 = 0;
if(NULL == spStr)
{
return;
}
if(MMI_MYDATA_SIZE_M_BYTE <= ulSize)
{
n1 = ulSize>>20; /*The same as ulSize/MMI_MYDATA_SIZE_M_BYTE*/;
n2 = ulSize&0x000FFFFF; /*The same as ulSize%MMI_MYDATA_SIZE_M_BYTE;*/
n2 *= 100;
n2 >>= 20;
sprintf(spStr, "%d.%d%d MB", n1, n2/10, n2%10);
}
else if(MMI_MYDATA_SIZE_K_BYTE <= ulSize)
{
n1 = ulSize>>10; /*The same as ulSize/MMI_MYDATA_SIZE_K_BYTE*/;
n2 = ulSize & 0x000003FF; /*The same as ulSize%MMI_MYDATA_SIZE_K_BYTE;*/
n2 *= 100;
n2 >>= 10;
sprintf(spStr, "%d.%d%d KB", n1, n2/10, n2%10);
}
else
{
sprintf(spStr, "%d Byte", ulSize);
}
}
Top
7 楼zijida(左八荣,右八耻,代表挂腰间,和谐贴胸前,人挡杀人,佛挡杀佛!)回复于 2005-09-22 17:39:11 得分 5
楼主小脑袋瓜儿挺灵的.Top
8 楼linxyuan(心远)回复于 2005-09-22 17:46:32 得分 5
good!
Top




