github.com/mdaxf/iac@v0.0.0-20240519030858-58a061660378/vendor_skip/golang.org/x/text/number/number.go (about) 1 // Copyright 2017 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package number 6 7 // TODO: 8 // p.Printf("The gauge was at %v.", number.Spell(number.Percent(23))) 9 // // Prints: The gauge was at twenty-three percent. 10 // 11 // p.Printf("From here to %v!", number.Spell(math.Inf())) 12 // // Prints: From here to infinity! 13 // 14 15 import ( 16 "golang.org/x/text/internal/number" 17 ) 18 19 const ( 20 decimalVerbs = "vfgd" 21 scientificVerbs = "veg" 22 ) 23 24 // Decimal formats a number as a floating point decimal. 25 func Decimal(x interface{}, opts ...Option) Formatter { 26 return newFormatter(decimalOptions, opts, x) 27 } 28 29 var decimalOptions = newOptions(decimalVerbs, (*number.Formatter).InitDecimal) 30 31 // Scientific formats a number in scientific format. 32 func Scientific(x interface{}, opts ...Option) Formatter { 33 return newFormatter(scientificOptions, opts, x) 34 } 35 36 var scientificOptions = newOptions(scientificVerbs, (*number.Formatter).InitScientific) 37 38 // Engineering formats a number using engineering notation, which is like 39 // scientific notation, but with the exponent normalized to multiples of 3. 40 func Engineering(x interface{}, opts ...Option) Formatter { 41 return newFormatter(engineeringOptions, opts, x) 42 } 43 44 var engineeringOptions = newOptions(scientificVerbs, (*number.Formatter).InitEngineering) 45 46 // Percent formats a number as a percentage. A value of 1.0 means 100%. 47 func Percent(x interface{}, opts ...Option) Formatter { 48 return newFormatter(percentOptions, opts, x) 49 } 50 51 var percentOptions = newOptions(decimalVerbs, (*number.Formatter).InitPercent) 52 53 // PerMille formats a number as a per mille indication. A value of 1.0 means 54 // 1000‰. 55 func PerMille(x interface{}, opts ...Option) Formatter { 56 return newFormatter(perMilleOptions, opts, x) 57 } 58 59 var perMilleOptions = newOptions(decimalVerbs, (*number.Formatter).InitPerMille) 60 61 // TODO: 62 // - Shortest: akin to verb 'g' of 'G' 63 // 64 // TODO: RBNF forms: 65 // - Compact: 1M 3.5T 66 // - CompactBinary: 1Mi 3.5Ti 67 // - Long: 1 million 68 // - Ordinal: 69 // - Roman: MCMIIXX 70 // - RomanSmall: mcmiixx 71 // - Text: numbers as it typically appears in running text, allowing 72 // language-specific choices for when to use numbers and when to use words. 73 // - Spell?: spelled-out number. Maybe just allow as an option? 74 75 // NOTE: both spelled-out numbers and ordinals, to render correctly, need 76 // detailed linguistic information from the translated string into which they 77 // are substituted. We will need to implement that first.