# [asterisk-users] Help with FUNC_MATH

Don Kelly dk at donkelly.biz
Thu Feb 13 13:11:34 CST 2020

Is it stored as a floating-point number or an integer? Floating-point decimal numbers are often not stored precisely. As in my example, below, “12” may be stored as 11.99999999999 (simplified) and, although it will be treated  as “12” in most cases, it will appear to be less than 12 in a comparison.

From: asterisk-users [mailto:asterisk-users-bounces at lists.digium.com] On Behalf Of Dovid Bender
Sent: Thursday, February 13, 2020 1:08 PM
To: Asterisk Users Mailing List - Non-Commercial Discussion
Subject: Re: [asterisk-users] Help with FUNC_MATH

HOUR_SELECTED is going to be 1-12

On Thu, Feb 13, 2020 at 2:05 PM Don Kelly <dk at donkelly.biz> wrote:

Is HOUR_SELECTED a floating-point number (e.g. 11.99999999999)? If so, you need to account for that in your comparison.

--Don

From: asterisk-users [mailto:asterisk-users-bounces at lists.digium.com] On Behalf Of Dovid Bender
Sent: Thursday, February 13, 2020 4:47 AM
To: Asterisk Users Mailing List - Non-Commercial Discussion
Subject: [asterisk-users] Help with FUNC_MATH

Hi,

I have some dialplan code that is trying to convert 12 hour time with AM/PM to 24 hour format. The code has something like this:
Exten => 2,1,ExecIf(\${MATH(\${HOUR_SELECTED}<12)}?Set(HOUR_SELECTED=\${MATH(\${HOUR_SELECTED}+12,int)}))

Earlier on in the dialplan HOUR_SELECTED is set to 12. When they press option 2 they are selecting PM. If the time is from 1PM to 11PM then I want to add 12 to the number (so if it's 1 make it 13 etc.). When I run the above the logs show the result as false yet if the user sets HOUR_SELECTED to 12 then after this line of dialplan code it gets switched to 24. What am I doing wrong here?

The exact DP code is:

Exten => 2,     1, Noop(BEFORE CHECK HOUR_SELECTED is \${HOUR_SELECTED})
same =>        n, ExecIf(\${MATH(\${HOUR_SELECTED}<12)}?Set(HOUR_SELECTED=\${MATH(\${HOUR_SELECTED}+12,int)}))
same =>        n, Noop(AFTER CHECK HOUR_SELECTED IS \${HOUR_SELECTED})

And the output of the logs is:

[Feb 13 10:46:18] VERBOSE[1580][C-00007bc6] pbx.c: Executing [2 at am_pm_select:1] NoOp("SIP/204.145.219.31-000081c6", "BEFORE CHECK HOUR_SELECTED is 12") in new stack
[Feb 13 10:46:18] DEBUG[1580][C-00007bc6] pbx_variables.c: Result of 'HOUR_SELECTED' is '12'
[Feb 13 10:46:18] DEBUG[1580][C-00007bc6] pbx_variables.c: Function MATH(12<12) result is 'FALSE'
[Feb 13 10:46:18] DEBUG[1580][C-00007bc6] pbx_variables.c: Result of 'HOUR_SELECTED' is '12'
[Feb 13 10:46:18] DEBUG[1580][C-00007bc6] pbx_variables.c: Function MATH(12+12,int) result is '24'
[Feb 13 10:46:18] DEBUG[1580][C-00007bc6] pbx.c: Launching 'ExecIf'
[Feb 13 10:46:18] VERBOSE[1580][C-00007bc6] pbx.c: Executing [2 at am_pm_select:2] ExecIf("SIP/204.145.219.31-000081c6", "FALSE?Set(HOUR_SELECTED=24)") in new stack
[Feb 13 10:46:18] DEBUG[1580][C-00007bc6] pbx_variables.c: Result of 'HOUR_SELECTED' is '24'
[Feb 13 10:46:18] DEBUG[1580][C-00007bc6] pbx.c: Launching 'NoOp'
[Feb 13 10:46:18] VERBOSE[1580][C-00007bc6] pbx.c: Executing [2 at am_pm_select:3] NoOp("SIP/204.145.219.31-000081c6", "AFTER CHECK HOUR_SELECTED IS 24") in new stack

TIA.

Dovid

--
_____________________________________________________________________
-- Bandwidth and Colocation Provided by http://www.api-digital.com --

Check out the new Asterisk community forum at: https://community.asterisk.org/

New to Asterisk? Start here:
https://wiki.asterisk.org/wiki/display/AST/Getting+Started

asterisk-users mailing list
To UNSUBSCRIBE or update options visit:
http://lists.digium.com/mailman/listinfo/asterisk-users

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-users/attachments/20200213/0329fa73/attachment.html>