Splunk Search

Typecast an integer to a float?

nick405060
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
1 Solution

back2root
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 c_part_optionA=(1.0-b) | eval c_part_optionB=(1.00-b) | eval c_part_optionC=exact((1.0-b)) | table b c_*

Results:

b c_part_optionA c_part_optionB c_part_optionC
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

HiroshiSatoh
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

back2root
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 c_part_optionA=(1.0-b) | eval c_part_optionB=(1.00-b) | eval c_part_optionC=exact((1.0-b)) | table b c_*

Results:

b c_part_optionA c_part_optionB c_part_optionC
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.

nick405060
Motivator

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

0 Karma
Got questions? Get answers!

Join the Splunk Community Slack to learn, troubleshoot, and make connections with fellow Splunk practitioners in real time!

Meet up IRL or virtually!

Join Splunk User Groups to connect and learn in-person by region or remotely by topic or industry.

Get Updates on the Splunk Community!

Agentic SOC Triage: Investigating Splunk ES Notables with MCP Server and a Local LLM

The Problem: Too Many Alerts, Too Little Context Security operations teams running Splunk Enterprise Security ...

All Work and No Play? Not at .conf26! Unwind at These Evening Events

Between hands-on technical sessions, keynote reveals, and diving into live architectures, .conf26 is packed ...

Join the Hackathon at .conf26 and build a No-Code AI agent

Join us for the AI Agent Buildathon, an in-person, three-hour hands-on Hackathon where you’ll use Splunk Agent ...