Need to restrict upto 2 decimal places

Certified Associate Developer

Hi All,

i have floatingpoint field in my UI, i want to restrict user from typing values upto 2 decimal point and Below is my expected results

  • If the user enters 12, it will be rounded off to 12.00
  • If the user enters 12.1, it will be rounded off to 12.10
  • If the user tries to enter 12.678, it will not be allowed. The entry will be cut off at 12.67

but what is the issue am facing is its allowing me to enter more values after decimal point and also if i give round values it's not taking .00 value.

below is my code

a!floatingPointField(
  label: "Dental Premium (Annual)",
  labelPosition: "ABOVE",
  value: ri!intakePreminumDetails['recordType!{4d82eb7f-ba46-46a2-a7dc-969f4ffcf344}GSE_SCL Intake Premium Details.fields.{cef89c65-a133-4766-bbb5-93cbcceddcab}dentalPremium'],
  saveInto: {
    a!save(ri!intakePreminumDetails['recordType!{4d82eb7f-ba46-46a2-a7dc-969f4ffcf344}GSE_SCL Intake Premium Details.fields.{cef89c65-a133-4766-bbb5-93cbcceddcab}dentalPremium'],
    if(a!isNotNullOrEmpty(save!value),fixed(save!value,2),null)),
   
  },
 

my rule input source is recordtype. and which of data type as decimal and also in db its decimal(10,2) .
note(am using external db (sql server management studio) using connected system)

  Discussion posts and replies are publicly visible

Parents
  • 0
    Certified Lead Developer

    a!floatingPointField cannot restrict decimal input during typing because it lacks a decimalPlaces parameter and relies on native browser number input behavior.
    Try this

    a!localVariables(
      local!dentalPremium: null,
      a!textField(
        label: "Dental Premium (Annual)",
        labelPosition: "ABOVE",
        refreshAfter: "UNFOCUS",
        value: if(
          a!isNullOrEmpty(local!dentalPremium),
          null,
          text(local!dentalPremium, "0.00")
        ),
        saveInto: a!save(
          local!dentalPremium,
          if(
            a!isNullOrEmpty(save!value),
            null,
            floor(todecimal(save!value) * 100) / 100
          )
        )
      )
    )

  • 0
    Certified Associate Developer
    in reply to Shubham Aware

    Thanks   and   .. using this i was able to achieve 80% but if i gave alphabets its throws error and it breaks the screen. Instead of that how can we show validation message .

  • 0
    Certified Lead Developer
    in reply to Anitha Dharmalingam

    Oops - my null check in the saveInto should have done the null test against the "todecimal" version of the save!value just to make sure it contained anything valid after invalid characters are stripped out.  Here's mine again but with that one function added back in, and it works even when junk, text-only, or mixed (number and text) info is entered.

    a!localVariables(
      local!testDecimal: null(),
    
      a!textField(
        label: "Fake decimal entry",
        refreshAfter: "KEYPRESS",
        placeholder: "Enter Decimal Value",
    
        value: if(
          a!isNullOrEmpty(local!testDecimal),
          null(),
          fixed(local!testDecimal, 2)
        ),
        saveInto: {
          a!save(
            local!testDecimal,
            if(
              a!isNotNullOrEmpty(todecimal(save!value)),
              todecimal(trunc(todecimal(save!value), 2)),
              todecimal(null())
            )
          )
        }
      )
    )

  • 0
    Certified Associate Developer
    in reply to Mike Schmitt

    a!localVariables(
      local!data,
      a!floatingPointField(
        label: "Dental Premium (Annual)",
        labelPosition: "ABOVE",
        value: local!data,
        saveInto: {
          a!save(
            local!data,
            if(
              a!isNotNullOrEmpty(todecimal(save!value)),
              (save!value),
              todecimal(null())
            )
          ),
    
        },
        refreshAfter: "UNFOCUS",
        validations: {
          if(
            not(
              regexMatch("^[0-9]*\.[0-9]{2}$", local!data)
            ),
            "Please enter a valid number with up to 2 decimal places.",
            {}
          )
        }
      )
    )

    Hi   . Thank you for the help, it works well. But here now user dont want to truc the values instead of that expecting to show the validation so that they will give what they want either they want rounded value or raw data.

    For that i tried using below regexMatch function for the validation, but the issue is it is throwing validations if we give round values (123)or 1 decimal values (12.10). Can you please help how to show validation only when they enter more then 2 decimal

Reply
  • 0
    Certified Associate Developer
    in reply to Mike Schmitt

    a!localVariables(
      local!data,
      a!floatingPointField(
        label: "Dental Premium (Annual)",
        labelPosition: "ABOVE",
        value: local!data,
        saveInto: {
          a!save(
            local!data,
            if(
              a!isNotNullOrEmpty(todecimal(save!value)),
              (save!value),
              todecimal(null())
            )
          ),
    
        },
        refreshAfter: "UNFOCUS",
        validations: {
          if(
            not(
              regexMatch("^[0-9]*\.[0-9]{2}$", local!data)
            ),
            "Please enter a valid number with up to 2 decimal places.",
            {}
          )
        }
      )
    )

    Hi   . Thank you for the help, it works well. But here now user dont want to truc the values instead of that expecting to show the validation so that they will give what they want either they want rounded value or raw data.

    For that i tried using below regexMatch function for the validation, but the issue is it is throwing validations if we give round values (123)or 1 decimal values (12.10). Can you please help how to show validation only when they enter more then 2 decimal

Children
No Data