On Friday, October 18, 2019 at 5:53:24 PM UTC+3, Richard Damon wrote: > On 10/18/19 9:45 AM, doganad...@gmail.com wrote: > > On Friday, October 18, 2019 at 4:17:51 PM UTC+3, Richard Damon wrote: > >> On 10/18/19 9:03 AM, doganad...@gmail.com wrote: > >>> On Friday, October 18, 2019 at 2:21:34 PM UTC+3, Richard Damon wrote: > >>>> On 10/18/19 4:35 AM, doganad...@gmail.com wrote: > >>>>> Here is my question: > >>>>> > >>>>> > >>>>> I am using the numpy.std formula to calculate the standart deviation. > >>>>> However, the result comes as a number in scientific notation. > >>>>> Therefore I am asking, How to convert a scientific notation to decimal > >>>>> number, and still keep the data format as float64 ? > >>>>> > >>>>> Or is there any workaround to get the initial standart deviation result > >>>>> as a decimal number? > >>>>> > >>>>> > >>>>> Here is my code: > >>>>> > >>>>> stdev=numpy.std(dataset) > >>>>> print(stdev) > >>>>> Result: 4.999999999999449e-05 > >>>>> > >>>>> > >>>>> print(stdev.dtype) > >>>>> Result: float64 > >>>>> > >>>>> > >>>>> Solutions such as this: > >>>>> > >>>>> stdev=format(stdev, '.10f') > >>>>> converts the data into a string object! which I don't want. > >>>>> > >>>>> > >>>>> Expected result: I am willing to have a result as a decimal number in a > >>>>> float64 format. > >>>>> > >>>>> System: (Python 3.7.4 running on Win10) > >>>>> > >>>>> > >>>>> Regards, > >>>> The number itself isn't in scientific notation or a fixed point number, > >>>> but is a floating point number that is expressed internally as an > >>>> integer times a power of 2 (that is the basic representation format for > >>>> floating point). > >>>> > >>>> Scientific notation vs fixed point notation is purely an OUTPUT > >>>> configuration, not a function on how the number is stored (so in one > >>>> sense IS more closely linked to a string than the float itself). > >>>> > >>>> -- > >>>> Richard Damon > >>> Hello Richard, > >>> > >>> You seem so right. But what will we do with those strings with 'e' in it? > >>> > >>> There are ways to present those in a 'normal' way with formatting. > >>> However, the result of those formatting turns them into str object and > >>> which limits you to do any further numerical things with them. > >>> > >>> Another thing which I have observed, while doing some experimental thing > >>> is that: > >>> > >>>>>> 0.0 > >>> 0.0 > >>> > >>>>>> 0.1 > >>> 0.1 > >>> > >>>>>> 0.01 > >>> 0.01 > >>> > >>>>>> 0.001 > >>> 0.001 > >>> > >>>>>> 0.0001 > >>> 0.0001 > >>> > >>>>>> 0.00001 > >>> 1e-05 > >>> > >>> Again another thing with 1e-05! instead of 0.00001 , Is there anything I > >>> can do about it? > >> The 'e' is only part of the string representation presentation of the > >> value. By default, python decides to present small numbers in > >> exponential format. If you don't like that, when you print the numbers > >> specify the format YOU want, rather than taking the default. > >> > >> Note, that print() by necessity converts an objects value to a string, > >> and this conversion for floats uses exponential notation by default for > >> small numbers. If you don't like it, then use an explicit format for the > >> conversion. > >> > >> An alternative might be to change from using a float64 to making it > >> something like a Decimal. > >> > >> -- > >> Richard Damon > > > > By taking the default OUTPUT of a numpy formula, in my case standart > > deviation, I am using the advantage of saving the result into an excel file > > without any problems.(they come as numpy.float64) From there, The excel > > takes all the things as they are and some of my small numbers are shown > > with the 'e' on the excel sheet. Which I am trying to avoid. > > > > I don't need 100 numbers after the comma. What I need is a reasonable > > amount of decimal numbers to show that the number is small enough, also > > keeping them in float64, in my case to save them into excel file. One > > important thing to say is that, if I convert them into string and save them > > on excel they come with 'dot' instead of comma. And If try to translate the > > 'dot' manually into 'comma' the excel gives warning message to turn those > > inputs into numbers. Which I also avoid. > > > > If this is Python default, showing all numbers smaller than 0.0001 with 'e' > > and there is no way to have them in both a human readable and excel savable > > form. > > > > what sould I do? > > > > Should I consider using another programming language? > > > > If yes, then this language could be callable from within python and I might > > do things I can. > > The problem is you are thinking of your floating point number as storing > something like 5e-5 or 0.00005, it doesn't. it store something more like > 1.6384 x 2**15 (or some really big 50 some bit integer time a different > power of 2). As your words said, it SHOWS it with an e, but that isn't > what is in the number. The number is just a number represented as a float. > > If you don't what to print them with the e, then format them when you > print to be the way you want. > > As to the excel, you aren't being very clear about how you are > generating the excel file. If you are directly generating an .xls file, > then I believe you want to store the float64 value directly into it, and > their is no dot/comma as the decimal separator issue. More like it > seems, you are generating a 'CSV' file, which is a textual > representation, and if you are doing that then you need to be careful to > follow the rules for the CSV format you are using (and if you are using > the European format which uses comma as the decimal point, that raises > other issues). Agian here, it isn't how the number is stored, but how it > is formatted for output. > > print(x) is a quick and dirty method to display values, and isn't always > the right way. Sometimes you need to be more careful and explicitly > define the format to output the value. > > Keep values internally in the right internal format, which here seems to > be float64. When outputting them (to user or file for another program) > be sure to handle any needed formatting if the defaults are suitable. > > -- > Richard Damon
Richard, as a note: the method I was using to save on excel is by using pandas. But more importantly , I have decided to take the default formats as they are. In that situation the representation of the numbers on excel remains with 'e' which is now ok, as long as I can do further calculations with them. In the meanwhile I have checked Scala , and it's more limited then Python. As an example: 0.0001 1.0E-4: Double thank you Richard and Chris for sharing knowledge. and I hope to meet you in a another problem. -- https://mail.python.org/mailman/listinfo/python-list