blob: f5ca93b15d27fcf335c1cd1c250440ab4b523b6b [file] [log] [blame]
 // Copyright 2017 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. package number // TODO: // p.Printf("The gauge was at %v.", number.Spell(number.Percent(23))) // // Prints: The gauge was at twenty-three percent. // // p.Printf("From here to %v!", number.Spell(math.Inf())) // // Prints: From here to infinity! // import ( "golang.org/x/text/internal/number" ) const ( decimalVerbs = "vfgd" scientificVerbs = "veg" ) // Decimal formats a number as a floating point decimal. func Decimal(x interface{}, opts ...Option) Formatter { return newFormatter(decimalOptions, opts, x) } var decimalOptions = newOptions(decimalVerbs, (*number.Formatter).InitDecimal) // Scientific formats a number in scientific format. func Scientific(x interface{}, opts ...Option) Formatter { return newFormatter(scientificOptions, opts, x) } var scientificOptions = newOptions(scientificVerbs, (*number.Formatter).InitScientific) // Engineering formats a number using engineering notation, which is like // scientific notation, but with the exponent normalized to multiples of 3. func Engineering(x interface{}, opts ...Option) Formatter { return newFormatter(engineeringOptions, opts, x) } var engineeringOptions = newOptions(scientificVerbs, (*number.Formatter).InitEngineering) // Percent formats a number as a percentage. A value of 1.0 means 100%. func Percent(x interface{}, opts ...Option) Formatter { return newFormatter(percentOptions, opts, x) } var percentOptions = newOptions(decimalVerbs, (*number.Formatter).InitPercent) // PerMille formats a number as a per mille indication. A value of 1.0 means // 1000‰. func PerMille(x interface{}, opts ...Option) Formatter { return newFormatter(perMilleOptions, opts, x) } var perMilleOptions = newOptions(decimalVerbs, (*number.Formatter).InitPerMille) // TODO: // - Shortest: akin to verb 'g' of 'G' // // TODO: RBNF forms: // - Compact: 1M 3.5T // - CompactBinary: 1Mi 3.5Ti // - Long: 1 million // - Ordinal: // - Roman: MCMIIXX // - RomanSmall: mcmiixx // - Text: numbers as it typically appears in running text, allowing // language-specific choices for when to use numbers and when to use words. // - Spell?: spelled-out number. Maybe just allow as an option? // NOTE: both spelled-out numbers and ordinals, to render correctly, need // detailed linguistic information from the translated string into which they // are substituted. We will need to implement that first.