Archive
Highlighted

Typecast an integer to a float?

Motivator
| makeresults | eval a=1024.0 | eval b=.15 | eval c=a*(1.0-b) | table a b c

gives

a   b   c
1024.0  0.15    870

There are no integers, only floats. So why does Splunk typecast "c" to an int? It's not like it typecasts 870.0 to an int (which would still be unacceptable) it does it to 870.4.

Also, how do I fix this so that 870.4 is displayed?

Tags (1)
0 Karma
Highlighted

Re: Typecast an integer to a float?

Path Finder

Splunk by default rounds values within eval calculations to a precision that it thinks is appropriate. Thereby the resulting precision is limited by the precision of the least-precise operand.

To make it more precise let's focuse on the "(1.0-b)" part of your calculation:

Search:

| makeresults | eval b=.15 | eval cpartoptionA=(1.0-b) | eval cpartoptionB=(1.00-b) | eval cpartoptionC=exact((1.0-b)) | table b c_*

Results:

b cpartoptionA cpartoptionB cpartoptionC
0.15 0.9 0.85 0.85

So the solution to your problem is using the exact() function as dokumented in the SearchReference.

| makeresults | eval a=1024.0 | eval b=.15 | eval c=exact(a*(1.0-b)) | table a b c

This behaviour can be unexpected unexpected by an user. In my opinion the decision to do it that way is suboptimal and the behaviour is not documented verry well.

View solution in original post

Highlighted

Re: Typecast an integer to a float?

Motivator

Thanks. Definitely documented poorly, nothing in a Google search, and for something so basic too

0 Karma
Highlighted

Re: Typecast an integer to a float?

Champion

It is rounded to an integer. If you want to control, use the following function.

ex.
| makeresults | eval a=1024.0 | eval b=.15 | eval c=round(a*(1.0-b),2) | table a b c

0 Karma