X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbcfilebox.C;fp=cinelerra-5.1%2Fguicast%2Fbcfilebox.C;h=22afff8eda58fb5f295b0a92cb983799d28fa9b4;hb=418e8644335db47143bc421f11be2c2e68901d45;hp=e050bfe3b2150dd9f75b2233d736594ee53e308e;hpb=877bf33862808d3c3fbe11a31de0000feb915f21;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/guicast/bcfilebox.C b/cinelerra-5.1/guicast/bcfilebox.C index e050bfe3..22afff8e 100644 --- a/cinelerra-5.1/guicast/bcfilebox.C +++ b/cinelerra-5.1/guicast/bcfilebox.C @@ -781,6 +781,12 @@ static inline int64_t ipow(int m, int n) for( int64_t vv=m; n>0; vv*=vv,n>>=1 ) if( n & 1 ) v *= vv; return v; } +static inline int ilen(int64_t v) +{ + int len = 1; + while( len<16 && (v/=10)>0 ) ++len; + return len; +} int BC_FileBox::create_tables() { @@ -817,21 +823,23 @@ int BC_FileBox::create_tables() static const long double kk = logl(1000.)/logl(1024.); size = expl(kk*logl((long double)size)) + 0.5; } - int len = 1; - for( int64_t s=size; len<16 && (s/=10)>0; ++len ); - int drop = len-3; + int len = ilen(size), drop = len-3, round = 1; + if( round && drop > 0 ) { //round + size += ipow(10,drop)/2; + len = ilen(size); drop = len-3; + } size /= ipow(10,drop); int sfx = (len-1)/3; int digits = (sfx+1)*3 - len; int64_t frac = ipow(10,digits); int mant = size / frac; int fraction = size - mant*frac; - if( fraction ) - sprintf(string, "%d.%0*d%s", - mant, digits, fraction, suffix[sfx]); + sfx = *suffix[sfx]; + if( sfx && size_format == FILEBOX_SIZE_1000 ) sfx += 'a'-'A'; + if( digits ) + sprintf(string, "%d.%0*d%c", mant, digits, fraction, sfx); else - sprintf(string, "%d%s", - mant, suffix[sfx]); + sprintf(string, "%d%c", mant, sfx); } else { sprintf(string, "%jd", size);