sketchucation logo sketchucation
    • Login
    ℹ️ Licensed Extensions | FredoBatch, ElevationProfile, FredoSketch, LayOps, MatSim and Pic2Shape will require license from Sept 1st More Info

    Is there a ceiling function like in excel?

    Scheduled Pinned Locked Moved Developers' Forum
    20 Posts 5 Posters 4.0k Views 5 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • F Offline
      Frankn
      last edited by

      Thanks Chris...

      I'm going to need to study that for awhile because at first glance I'm lost πŸ˜„ but on the other hand I'm glad it's not something simple because I was racking my brain trying to figure this out! 😳

      1 Reply Last reply Reply Quote 0
      • Chris FullmerC Offline
        Chris Fullmer
        last edited by

        Well, I put a few comments in it to help explain it, but not much. Here's a verbal rundown of it

        I've defined a method that accepts your float number, and the 2 numbers of the fraction you want to use for tolerance. 1/64 for example, gets written as 1.0 and 64.0 So if your number to round is 0.17578125, then you do this to round it:

        my_num = 0.17578125 rounded_num = precision(my_num, 1.0, 64.0)
        And rounded_num gets the returned rounded value.

        The method does a few simple steps. First it takes your float and makes an integer version of your float and subtracts them. This is doing 23.123321 - 23 = 0.123321 Its just a way to isolate the decimal, which is all we want for comparison. Then it runs a loop, testing to see if the decimal is greater than 1/64. If its greater, then we loop again, adding 1 to the original 1, making 2. It tests if the decimal is greater than 2/64. If it is, it tries again, adding 1 to 2, making 3. It does this until it reaches a case where the decimal is smaller than the fraction. That tells us that our decimal lies between the most recent tested fraction, and the one just smaller than it. So your example of 0.17578125 lies between the fraction of 11/64 and 12/64.

        Then we have to figure out to which it is closer. So I get a value for 11/64 and 12/64. Then subtract our decimal from both, return the absolute value and compare them. If it is closer to the 12/64 then it returns that. If its closer to 11/64, then it returns that.

        That is sort of the convoluted answer.

        Lately you've been tan, suspicious for the winter.
        All my Plugins I've written

        1 Reply Last reply Reply Quote 0
        • F Offline
          Frankn
          last edited by

          Wow! Thanks for taking the time to explain it in a Ruby's for Dummies term! πŸ˜„ No way I would of come up with a solution to that problem!

          That now makes total sense... now I'm off to try and implement this in my script... should fun πŸ˜„

          Thanks again!

          1 Reply Last reply Reply Quote 0
          • J Offline
            Jim
            last edited by

            my_num = 0.17578125 frac = 16.0 # 1/16th (radix, specifically) rounded_num = (my_num * frac).round / frac

            Hi

            1 Reply Last reply Reply Quote 0
            • Chris FullmerC Offline
              Chris Fullmer
              last edited by

              That can't be right, you didn't even have to make any special methods to do that 😳 πŸ˜†

              Lately you've been tan, suspicious for the winter.
              All my Plugins I've written

              1 Reply Last reply Reply Quote 0
              • Dan RathbunD Offline
                Dan Rathbun
                last edited by

                This is for measurements?

                One limitation within Sketchup, is that the precision is limited to 0.001", no matter what the model units are set to.

                So using a fractional float of 0.1875" may get rounded by Sketchup. Will it be 0.187" or 0.188" ??
                I would suggest that you decide what it will be in your 'rounding' method...

                I'm not here much anymore.

                1 Reply Last reply Reply Quote 0
                • J Offline
                  Jim
                  last edited by

                  @Chris -Been there - just passing it along.

                  Hi

                  1 Reply Last reply Reply Quote 0
                  • TIGT Offline
                    TIG Moderator
                    last edited by

                    Here's Jim's clever solution made into a method...

                    def roundtofraction(num, frac)
                      num = num.to_f
                      frac = frac.to_f
                      return (num * frac).round / frac
                    end
                    

                    Usage:
                    my_num = 0.17578125
                    my_frac = 16
                    my_num=roundtofraction(my_num, my_frac)

                    0.1875

                    TIG

                    1 Reply Last reply Reply Quote 0
                    • F Offline
                      Frankn
                      last edited by

                      @jim said:

                      my_num = 0.17578125 frac = 16.0 # 1/16th (radix, specifically) rounded_num = (my_num * frac).round / frac

                      Dude you're a genius! That is awesome!

                      Thank you!!

                      1 Reply Last reply Reply Quote 0
                      • F Offline
                        Frankn
                        last edited by

                        @chris fullmer said:

                        That can't be right, you didn't even have to make any special methods to do that 😳 πŸ˜†

                        Chris don't feel bad even after doing this thing called 'programming' for the last few weeks I'm still getting the hang of methods, classes and all that jazz!! 😳 πŸ˜†

                        1 Reply Last reply Reply Quote 0
                        • F Offline
                          Frankn
                          last edited by

                          @dan rathbun said:

                          This is for measurements?

                          One limitation within Sketchup, is that the precision is limited to 0.001", no matter what the model units are set to.

                          So using a fractional float of 0.1875" may get rounded by Sketchup. Will it be 0.187" or 0.188" ??
                          I would suggest that you decide what it will be in your 'rounding' method...

                          Yes Dan, this is for measurements.

                          I didn't know that limitation about Sketchup, interesting. But I'm not building a plane here just cabinets, vanties and that kind of thing, but I just don't like seeing that ~ and this script programming is addictive! You just keep adding on features and stuff you can do, I think I might have a problem. πŸ˜†

                          Thanks for the info

                          1 Reply Last reply Reply Quote 0
                          • F Offline
                            Frankn
                            last edited by

                            @tig said:

                            Here's Jim's clever solution made into a method...

                            def roundtofraction(num, frac)
                            >   num = num.to_f
                            >   frac = frac.to_f
                            >   return (num * frac).round / frac
                            > end
                            

                            Usage:

                            my_num = 0.17578125
                            my_frac = 16
                            my_num=roundtofraction(my_num, my_frac)

                            0.1875

                            Thanks yet again TIG! πŸ˜„

                            1 Reply Last reply Reply Quote 0
                            • Chris FullmerC Offline
                              Chris Fullmer
                              last edited by

                              Yeah TIG, thanks for wrapping it into its own method, now it feels at least slightly over-engineered πŸ˜„

                              Lately you've been tan, suspicious for the winter.
                              All my Plugins I've written

                              1 Reply Last reply Reply Quote 0
                              • TIGT Offline
                                TIG Moderator
                                last edited by

                                Anything to prolong the embarrassment πŸ˜‰

                                TIG

                                1 Reply Last reply Reply Quote 0
                                • Chris FullmerC Offline
                                  Chris Fullmer
                                  last edited by

                                  @tig said:

                                  Anything to prolong the embarrassment πŸ˜‰

                                  πŸ‘ πŸ˜„

                                  Lately you've been tan, suspicious for the winter.
                                  All my Plugins I've written

                                  1 Reply Last reply Reply Quote 0
                                  • Dan RathbunD Offline
                                    Dan Rathbun
                                    last edited by

                                    Just a note to remind all..

                                    ... that now with Ruby in the 1.8.6 branch, we have both a ceil() and a floor() method defined for the Float class.

                                    I'm not here much anymore.

                                    1 Reply Last reply Reply Quote 0
                                    • 1 / 1
                                    • First post
                                      Last post
                                    Buy SketchPlus
                                    Buy SUbD
                                    Buy WrapR
                                    Buy eBook
                                    Buy Modelur
                                    Buy Vertex Tools
                                    Buy SketchCuisine
                                    Buy FormFonts

                                    Advertisement