// 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 numberimport ()// An Option configures a Formatter.typeOptionoptiontype option func(tag language.Tag, f *number.Formatter)// TODO: SpellOut requires support of the ICU RBNF format.// func SpellOut() Option// NoSeparator causes a number to be displayed without grouping separators.func () Option {returnfunc( language.Tag, *number.Formatter) { .GroupingSize = [2]uint8{} }}// MaxIntegerDigits limits the number of integer digits, eliminating the// most significant digits.func ( int) Option {returnfunc( language.Tag, *number.Formatter) {if >= 1<<8 { = (1 << 8) - 1 } .MaxIntegerDigits = uint8() }}// MinIntegerDigits specifies the minimum number of integer digits, adding// leading zeros when needed.func ( int) Option {returnfunc( language.Tag, *number.Formatter) {if >= 1<<8 { = (1 << 8) - 1 } .MinIntegerDigits = uint8() }}// MaxFractionDigits specifies the maximum number of fractional digits.func ( int) Option {returnfunc( language.Tag, *number.Formatter) {if >= 1<<15 { = (1 << 15) - 1 } .MaxFractionDigits = int16() }}// MinFractionDigits specifies the minimum number of fractional digits.func ( int) Option {returnfunc( language.Tag, *number.Formatter) {if >= 1<<8 { = (1 << 8) - 1 } .MinFractionDigits = uint8() }}// Precision sets the maximum number of significant digits. A negative value// means exact.func ( int) Option {returnfunc( language.Tag, *number.Formatter) { .SetPrecision() }}// Scale simultaneously sets MinFractionDigits and MaxFractionDigits to the// given value.func ( int) Option {returnfunc( language.Tag, *number.Formatter) { .SetScale() }}// IncrementString sets the incremental value to which numbers should be// rounded. For instance: Increment("0.05") will cause 1.44 to round to 1.45.// IncrementString also sets scale to the scale of the increment.func ( string) Option { := 0 := 0 := := 0for ; < len() && '0' <= [] && [] <= '9'; ++ { *= 10 += int([]) - '0' }if < len() && [] == '.' {for ++; < len() && '0' <= [] && [] <= '9'; ++ { *= 10 += int([]) - '0' ++ } }if < len() { = 0 = 0 }returnfunc( language.Tag, *number.Formatter) { .Increment = uint32() .IncrementScale = uint8() .SetScale() }}func noop(language.Tag, *number.Formatter) {}// PatternOverrides allows users to specify alternative patterns for specific// languages. The Pattern will be overridden for all languages in a subgroup as// well. The function will panic for invalid input. It is best to create this// option at startup time.// PatternOverrides must be the first Option passed to a formatter.func ( map[string]string) Option {// TODO: make it so that it does not have to be the first option. // TODO: use -x-nochild to indicate it does not override child tags. := map[language.Tag]*number.Pattern{}for , := range { := language.MustParse() , := number.ParsePattern()if != nil {panic(fmt.Errorf("number: PatternOverrides: %v", )) } [] = }returnfunc( language.Tag, *number.Formatter) {// TODO: Use language grouping relation instead of parent relation. // TODO: Should parent implement the grouping relation?for := ; ; = .Parent() {if , := []; { .Pattern = *break }if == language.Und {break } } }}// FormatWidth sets the total format width.func ( int) Option {if <= 0 {returnnoop }returnfunc( language.Tag, *number.Formatter) { .FormatWidth = uint16()if .PadRune == 0 { .PadRune = ' ' } }}// Pad sets the rune to be used for filling up to the format width.func ( rune) Option {returnfunc( language.Tag, *number.Formatter) { .PadRune = }}// TODO:// - FormatPosition (using type aliasing?)// - Multiplier: find a better way to represent and figure out what to do// with clashes with percent/permille.// - NumberingSystem(nu string): not accessible in number.Info now. Also, should// this be keyed by language or generic?// - SymbolOverrides(symbols map[string]map[number.SymbolType]string) Option
The pages are generated with Goldsv0.8.2. (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu.
PR and bug reports are welcome and can be submitted to the issue list.
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds.