Data to Human-Readable Text Converter
Convert numbers, dates, durations, file sizes, lists, and booleans into plain English text. Free online verbalization utility with 10+ conversion modes.
About
Raw data values - timestamps, byte counts, large integers - are unambiguous to machines but hostile to human cognition. A value like 1048576 requires mental parsing; the phrase "one million forty-eight thousand five hundred seventy-six" does not. Misreading a single digit in a financial figure or a date field can cascade into contractual errors, incorrect invoices, or compliance violations. This tool implements deterministic verbalization algorithms for 10 distinct data types: cardinal and ordinal numbers (up to 1015), ISO dates, relative timestamps, millisecond durations, Oxford-comma lists, binary and SI file sizes, booleans, percentages, and English pluralization with an irregular-word dictionary.
Each function returns a plain English string with no markup. The number-to-words engine uses recursive scale-group decomposition through trillions. The pluralizer covers 80+ irregular English nouns. Relative time calculations reference Date.now() and bucket deltas into the most natural human unit. This tool approximates natural speech patterns. It does not handle locale-specific grammar or non-English languages. Pro tip: when verbalizing currency, convert to the minor unit (cents) first to avoid floating-point rounding artifacts.
Formulas
The number-to-words algorithm decomposes an integer n into scale groups using integer division and modulo. For each scale s in the ordered set {trillion, billion, million, thousand}:
Each chunk (0 - 999) is recursively verbalized into hundreds, tens, and ones using lookup tables. Decimals are handled by splitting at the decimal point and verbalizing each digit of the fractional part individually, joined by the word "point".
Relative time computes the signed delta Ξt:
The delta is bucketed through thresholds: 60 s β minutes, 3600 s β hours, 86400 s β days, 2592000 s β months, 31536000 s β years. The sign of Ξt determines "ago" vs. "in".
File size conversion divides bytes by the appropriate base:
Where base = 1024 for binary (KiB, MiB, GiB) or 1000 for SI (KB, MB, GB), and e is the largest exponent such that value β₯ 1.
The ordinal suffix is determined by the last two digits d of n: if d β {11, 12, 13} β "th"; else last digit 1 β "st", 2 β "nd", 3 β "rd", otherwise "th".
Where n = input number, s = scale value, chunk = group value (0 - 999), tnow = current timestamp, tinput = input timestamp, Ξt = time difference in seconds, bytes = input byte count, base = 1024 or 1000, e = scale exponent, d = last two digits for ordinal suffix.
Reference Data
| Mode | Input Example | Output Example | Range / Limits |
|---|---|---|---|
| Number to Words | 1450 | one thousand four hundred fifty | β999 trillion to 999 trillion |
| Ordinal | 42 | 42nd | Any non-negative integer |
| Date to Words | 2024-03-15 | March 15th, 2024 | Any valid ISO 8601 date |
| Relative Time | 2024-01-01T00:00:00Z | 5 months ago | Any valid date/timestamp |
| Duration | 90061000 ms | 1 day, 1 hour, 1 minute, 1 second | 0 to 1015 ms |
| List | apples, oranges, bananas | apples, oranges, and bananas | Any comma-separated items |
| File Size | 1073741824 bytes | 1.00 GiB | 0 to 1015 bytes |
| Boolean | TRUE | yes | TRUE / FALSE / 1 / 0 |
| Percentage | 42.5 | forty-two point five percent | Any numeric value |
| Pluralize | child, 3 | 3 children | English nouns, count β₯ 0 |
| Number (negative) | β250 | negative two hundred fifty | Handles sign prefix |
| Number (decimal) | 3.14 | three point one four | Arbitrary decimal digits |
| Duration (small) | 450 ms | 450 milliseconds | Sub-second precision |
| File Size (SI) | 1000000 bytes | 1.00 MB | SI (base-10) mode |
| Ordinal (edge) | 111 | 111th | Handles 11th/12th/13th correctly |