The HotDocs Computation Archive
Get Extra Help

0052 - Format a Fraction as "four and one half"

Description:

Formats a number and its fraction in the form "four and one half," "four and one fourth," "four and seven eighths," etc.


• Explanation •

HotDocs does not have a formatting option to spell out the fractional portion of a number (e.g. "one half" or "two-thirds"). This premium computation will. Examples: "four and one half," "four and one fourth," "four and seven eighths," etc.

The one caveat is that the computation must take the number and its fraction from a text string or variable, since a number value does not contain a formatted fraction. To explain, the computation needs to see a fraction (1/2, 3/4, etc.), whereas a number variable contains a decimal (.5, .75, etc.). If you would like to have a decimal (.5) spelled out as a fraction ("one half"), use this computation in conjunction with Computation #0116: Smarter Fraction Formatting. Computation #0116 will format your decimal number as a fraction which can then be fed into this computation.


•  •  •  •  •  •  •


• Code •

""
// Has fractional portion
IF FractionStr-t CONTAINS "/"

   // Integer portion
   SET Temp-n TO POSITION( FractionStr-t, " " )
   IF Temp-n > 0
      FORMAT(
         INTEGER( FIRST( FractionStr-t, Temp-n - 1 )) ,
         "nine"
      ) + " and "
   END IF

   // Fractional portion
   SET Temp-t TO LAST( FractionStr-t, LENGTH( FractionStr-t ) - Temp-n )

   IF Temp-t = "1/2"
      RESULT + "one half"
   ELSE

      // Numerator
      SET Temp-n TO POSITION( Temp-t, "/" )
      RESULT + FORMAT(
         INTEGER( FIRST( Temp-t, Temp-n - 1 )) ,
         "nine"
      )

      // Does denominator need to be plural?
      IF FIRST( Temp-t, Temp-n - 1 ) = "1"
         SET Temp-b TO FALSE
      ELSE
         SET Temp-b TO TRUE
      END IF

      // Denominator
      RESULT + " " +
      FORMAT(
         INTEGER( LAST( Temp-t, LENGTH( Temp-t ) - Temp-n )) ,
         "ninth"
      )

      IF Temp-b
         RESULT + "s"
      END IF

   END IF

// Has no fractional portion
ELSE
   FORMAT(
      INTEGER( FractionStr-t ) ,
      "nine"
   )
END IF

• Explanation •

The computation parses the string into an integer portion, numerator portion, and denominator portion, and then converts each into a numerical value and formats it appropriately. The parts are reassembled, and a string is returned with the formatting "nine and two-thirds."

See also, Computation #0051: Format a Number as "nine point seven five", #0062: "All (100%)", #0116: (Even) Smarter Fraction Formatting, #0150: Decimal Formatter.

 

• Model Template •

This template has everything you need set up and configured for you. It will work as-is, or can be adapted to your variable and dialog names. It contains: 1) sample Word and WordPerfect templates (or an Automator form) to demonstrate an implementation of the computation, 2) a component file containing the computation and all supporting dialogs and variables, and 3) instructions for adapting the computation for your use.

(Go to the download page)

 
 

• Contributors •

LegalCS