>>>> a = 123456.78 >>>> print "%g\n%e\n%f" % (a,a,a) > 123457 > 1.234568e+005 > 123456.780000
>Float number loses digits and becomes integer in the output ? Yep, I am rapidly coming to the comnclusion that %g is broken in Python. I must do some tests with gcc to see what it does with %g, it may be the wierd behaviour is coming from there. I've never used %g with gcc... > Can we override the %g in python, or adding in some other > format identifier so that print statement with custom format > string still works ? I don't think we can add new format specifiers. It would be an interesting feature to have though... The best we can do is create a class and define our own __str__ method. > Here if I want to dynamically output floating data based > on the number of significant digits (SD) from an input's: > - If SD > m, truncate (or round it) in the output > - If SD < m, just directly output the number > (without padding 0 to the end). > - In either of above cases, similar to %g, if %e is necessary, > just output %e format as result This lseems to be more about the number of SD input rather than the actual precision of the stored data. In other words this is a problem of string parsing. I'd write a function that calculated the SD of a given string and use the result to choose the output format. If you convert the string to a float the precision and the number of SD will be defined by Pythons internal binary representation which may only be an approximation to the input value. The output format can be defined by a set of parameters such as sign,length,precision,style. Theese can be used to create a format string: fmt = "%%s%s.%s%s" % sign,length,precision,style result = fmt % value HTH, Alan G. _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor