Loading ...
Sorry, an error occurred while loading the content.

RE: [Clip] Rounding clips

Expand Messages
  • John Shotsky
    Thanks! I need something simpler. I don t want to use a loop for this. I can round down with a simple replace, if the 4th digit is 1-4. After that, if the 4th
    Message 1 of 8 , Feb 4 9:31 PM
    • 0 Attachment
      Thanks!

      I need something simpler. I don't want to use a loop for this. I can round down with a simple replace, if the 4th digit
      is 1-4.

      After that, if the 4th digit is anything except 0-4, it should add one to the first three digits. If it's not possible
      without a loop, I'll probably round that down anyway - it isn't finance or math, it is just getting back to only 3
      significant digits.

      Regards,
      John

      From: ntb-clips@yahoogroups.com [mailto:ntb-clips@yahoogroups.com] On Behalf Of Don
      Sent: Friday, February 04, 2011 8:24 PM
      To: ntb-clips@yahoogroups.com
      Subject: Re: [Clip] Rounding clips


      see message 10156
      ROUND(1.5955*100)/100 = 1.600000 (Rounded up to the nearest cent)
      ROUND(1.59112*100)/100 = 1.590000 (Rounded down to the nearest cent)
      ROUND(5285/100)*100 = 5300.00 (Rounded up to the nearest hundred)
      ROUND(5249/100)*100 = 5200.00 (Rounded down to the nearest hundred)

      CEIL rounds the number up from zero to the next integer if it has a
      fractional part and it is a positive number. If it is a negative number,
      it rounds the number up towards zero to the next integer.
      It does not round it if the number does not have a decimal part.

      CEIL(7.9112) = 8.000000000000000
      CEIL(-7.9112) = -7.000000000000000
      CEIL(7.0000001) = 8.000000000000000
      CEIL(-7.0000001) = -7.000000000000000
      CEIL(7) = 7.000000000000000
      CEIL(-7) = -7.000000000000000

      FLOOR rounds the number down toward zero to the next integer if it has a
      fractional part and it is a positive number. If it is a negative number it
      rounds the number down from zero to the next integer.
      It makes no change if it does not have a decimal part.

      FLOOR(7.9112) = 7.000000000000000
      FLOOR(-7.9112) = -8.000000000000000
      FLOOR(7.0000001) = 7.000000000000000
      FLOOR(-7.0000001) = -8.000000000000000
      FLOOR(7) = 7.000000000000000
      FLOOR(-7) = -7.000000000000000

      On 2/4/2011 11:15 PM, John Shotsky wrote:
      > Has anyone written any clips to perform rounding of numbers? I want to round up if the 4th digit is 5-9. I just change
      > it to zero if it is 1-4.
      >
      > Here are a couple example numbers:
      > 19945
      > 19967
      >
      > The first result should be 19900 (which is easy, and I do that first, using a range with [1-4])
      > The second result should be 20000 (based on the 4th digit rounding up.)
      >
      > Thanks,
      > John
      >
      >
      > [Non-text portions of this message have been removed]
      >
      >
      >
      > ------------------------------------
      >
      > Fookes Software: http://www.fookes.com/
      > NoteTab website: http://www.notetab.com/
      > NoteTab Discussion Lists: http://www.notetab.com/groups.php
      >
      > ***
      > Yahoo! Groups Links
      >
      >
      >
      >



      [Non-text portions of this message have been removed]
    • Axel Berger
      ... Why? ^!Calc does correct rounding all on its own. Try the following after highlighting your number. N.B: It seems ^!Calc can t be nested, so I had to make
      Message 2 of 8 , Feb 4 9:52 PM
      • 0 Attachment
        John Shotsky wrote:
        > Has anyone written any clips to perform rounding of numbers?

        Why? ^!Calc does correct rounding all on its own. Try the following
        after highlighting your number.
        N.B: It seems ^!Calc can't be nested, so I had to make it two lines.

        ^!InsertSelect ^$Calc(^$GetSelection$/100;0)$
        ^!InsertText ^$Calc(^$GetSelection$*100;0)$

        Axel
      • flo.gehrke
        ... John, Are you dealing with full text or a list of numbers? If it s full-text the following clip could possibly work... ^!SetHintInfo Working...
        Message 3 of 8 , Feb 5 10:01 AM
        • 0 Attachment
          --- In ntb-clips@yahoogroups.com, "John Shotsky" <jshotsky@...> wrote:
          >
          > Here are a couple example numbers:
          > 19945
          > 19967
          >
          > The first result should be 19900 (...) The second result
          > should be 20000 (based on the 4th digit rounding up.)

          John,

          Are you dealing with full text or a list of numbers? If it's full-text the following clip could possibly work...

          ^!SetHintInfo Working...
          ^!SetScreenUpdate Off
          ^!Jump 1
          ^!Find "\b\d{5}\b" RS
          ^!IfError End
          ^!InsertSelect ^$Calc(^$Calc(^$GetSelection$/100;0)$*100)$
          ^!Goto Skip_-3

          If it's a list of numbers you could speed up the job with...

          ^!SetHintInfo Working...
          ^!SetScreenUpdate Off
          ; Copy selected numbers to the clipboard...
          ^!SetClipboard ^$GetDocListAll("\d{3}[0-4][0-9]";"$0\r\n")$
          ; ...and remove those numbers from the list
          ^!Replace "^\d{3}[0-4][0-9](\R|\Z)" >> "" WARS
          ; Round remaining numbers
          ^!Jump 1
          ^!Find "^\d{5}$" RS
          ^!IfError Out
          ^!InsertSelect ^$Calc(^$Calc(^$GetSelection$/100;0)$*100)$
          ^!Goto Skip_-3
          :Out
          ; Insert selected numbers from clipboard
          ^!InsertText ^P^$GetClipboard$
          ; Replace all the last two digits with '00'
          ^!Replace "^\d{3}\K\d{2}$" >> "00" WARS

          I've tested both clips with a list of 10,000 numbers. For me, the first clip needs 38 sec, the second clip needs 17 sec to do the job.

          Regards,
          Flo

          P.S. The ^$Calc$ is borrowed from Axel Berger showing how it can be nested ;-)
        • John Shotsky
          Thanks, Flo, that works great. And, I learned something again, as usual. :-) Regards, John Recipe formatting tools:
          Message 4 of 8 , Feb 5 10:41 AM
          • 0 Attachment
            Thanks, Flo, that works great. And, I learned something again, as usual. :-)

            Regards,
            John
            Recipe formatting tools: <http://recipetools.gotdns.com/> http://recipetools.gotdns.com
            RecipeTools FTP Site: <ftp://recipetoolsftp.gotdns.com/> ftp://recipetoolsftp.gotdns.com
            Beaverton Weather: <http://shotsky.gotdns.com/> http://shotsky.gotdns.com

            From: ntb-clips@yahoogroups.com [mailto:ntb-clips@yahoogroups.com] On Behalf Of flo.gehrke
            Sent: Saturday, February 05, 2011 10:02 AM
            To: ntb-clips@yahoogroups.com
            Subject: [Clip] Re: Rounding clips


            --- In ntb-clips@yahoogroups.com <mailto:ntb-clips%40yahoogroups.com> , "John Shotsky" <jshotsky@...> wrote:
            >
            > Here are a couple example numbers:
            > 19945
            > 19967
            >
            > The first result should be 19900 (...) The second result
            > should be 20000 (based on the 4th digit rounding up.)

            John,

            Are you dealing with full text or a list of numbers? If it's full-text the following clip could possibly work...

            ^!SetHintInfo Working...
            ^!SetScreenUpdate Off
            ^!Jump 1
            ^!Find "\b\d{5}\b" RS
            ^!IfError End
            ^!InsertSelect ^$Calc(^$Calc(^$GetSelection$/100;0)$*100)$
            ^!Goto Skip_-3

            If it's a list of numbers you could speed up the job with...

            ^!SetHintInfo Working...
            ^!SetScreenUpdate Off
            ; Copy selected numbers to the clipboard...
            ^!SetClipboard ^$GetDocListAll("\d{3}[0-4][0-9]";"$0\r\n")$
            ; ...and remove those numbers from the list
            ^!Replace "^\d{3}[0-4][0-9](\R|\Z)" >> "" WARS
            ; Round remaining numbers
            ^!Jump 1
            ^!Find "^\d{5}$" RS
            ^!IfError Out
            ^!InsertSelect ^$Calc(^$Calc(^$GetSelection$/100;0)$*100)$
            ^!Goto Skip_-3
            :Out
            ; Insert selected numbers from clipboard
            ^!InsertText ^P^$GetClipboard$
            ; Replace all the last two digits with '00'
            ^!Replace "^\d{3}\K\d{2}$" >> "00" WARS

            I've tested both clips with a list of 10,000 numbers. For me, the first clip needs 38 sec, the second clip needs 17 sec
            to do the job.

            Regards,
            Flo

            P.S. The ^$Calc$ is borrowed from Axel Berger showing how it can be nested ;-)



            [Non-text portions of this message have been removed]
          • flo.gehrke
            ... Thanks, John! I just found out that it s faster with ^!InsertText ^$Calc... -- there s no ^!InsertSelect ^$Calc... needed here. New runtime: 20 resp.
            Message 5 of 8 , Feb 5 12:11 PM
            • 0 Attachment
              --- In ntb-clips@yahoogroups.com, "John Shotsky" <jshotsky@...> wrote:
              >
              > Thanks, Flo, that works great...

              Thanks, John!

              I just found out that it's faster with '^!InsertText ^$Calc...' -- there's no '^!InsertSelect ^$Calc...' needed here. New runtime: 20 resp. 11 sec with 10,000 lines.

              Flo
            • Axel Berger
              ... So nesting Calcs does work after. It does here too now, no idea what that error I caught last time was about. Axel
              Message 6 of 8 , Feb 5 12:51 PM
              • 0 Attachment
                John Shotsky wrote:
                > ^!InsertSelect ^$Calc(^$Calc(^$GetSelection$/100;0)$*100)$

                So nesting Calcs does work after. It does here too now, no idea what
                that error I caught last time was about.

                Axel
              Your message has been successfully submitted and would be delivered to recipients shortly.