module

Unit::Formatter

Provides string formatting capabilities for measurements

This module adds various formatting methods to measurements for displaying values in different formats and styles.

Formatting Options

  • Precision: Control decimal places (0-10)
  • Unit Format: Short (:short) or long (:long) unit names
  • Humanization: Natural language output with pluralization
  • Smart Formatting: Automatic whole number detection

Examples

weight = Weight.new(10.5, Weight::Unit::Kilogram)
weight.format                      # => "10.50 kilogram"
weight.format(precision: 1)        # => "10.5 kilogram"
weight.format(unit_format: :short) # => "10.50 kg"
weight.humanize                    # => "10.5 kilograms"

Instance methods

format(precision : Int32 = 2, unit_format : Symbol = :long) : String

Returns a formatted string representation of the measurement

Parameters

  • precision: Number of decimal places (0-10, default: 2)
  • unit_format: Format style for units (:short or :long, default: :long)

Examples

measurement.format                                    # => "10.50 kilogram"
measurement.format(precision: 0)                      # => "11 kilogram"
measurement.format(precision: 3)                      # => "10.500 kilogram"
measurement.format(unit_format: :short)               # => "10.50 kg"
measurement.format(precision: 1, unit_format: :short) # => "10.5 kg"
Source
humanize

Returns a human-readable string with proper pluralization

Converts technical unit names to natural language with appropriate singular/plural forms based on the value.

Examples

Weight.new(1, Weight::Unit::Kilogram).humanize   # => "1 kilogram"
Weight.new(2, Weight::Unit::Kilogram).humanize   # => "2 kilograms"
Weight.new(0, Weight::Unit::Kilogram).humanize   # => "0 kilograms"
Weight.new(-1, Weight::Unit::Kilogram).humanize  # => "-1 kilogram"
Weight.new(1.5, Weight::Unit::Kilogram).humanize # => "1.5 kilograms"
Source
to_s(io : IO) : Nil

Writes the measurement to an IO stream

Uses a smart format that shows minimal decimal places but ensures integers display with .0 for consistency

Source