package number import ( "fmt" "regexp" ) var ( FloatingPrecision uint64 = 10 // Nombre de chiffres après la virgule pour un nombre décimal ou un nombre scientifique FixedPrecision = false // Si vrai le nombre de chiffres après la virgule est fixe. ) const ( rSign = `(\+|-)` rBSign = `(0|1)` rNb2 = `(0|1)` rNb8 = `[0-7]` rNb10 = `\d` rNb16 = `[0-9a-fA-F]` rNbN = `[0-9a-zA-Z]` rBase2 = `(B|b)` rBase8 = `(O|o)` rBase16 = `(X|x)` rExp10 = `E|e` rExpN = `×\d+\^` ) var ( rInt2 = fmt.Sprintf(`(%s)%s+`, rBase2, rNb2) rInt8 = fmt.Sprintf(`(%s)%s+`, rBase8, rNb8) rInt10 = fmt.Sprintf(`(%s)%s+`, rSign, rNb10) rInt16 = fmt.Sprintf(`(%s)%s+`, rBase8, rNb8) rIntN = fmt.Sprintf(`\(%s+\)%s?%s+`, rNb10, rSign, rNbN) rIntB = fmt.Sprintf(`%s(%s|%s|%s)`, rBSign, rInt2, rInt8, rInt16) rInt = fmt.Sprintf(`(%s|%s|%s)`, rInt10, rIntN, rIntB) rDec2 = fmt.Sprintf(`(%s)(%s+\.%s*|\.%s+)`, rBase2, rNb2, rNb2, rNb2) rDec8 = fmt.Sprintf(`(%s)(%s+\.%s*|\.%s+)`, rBase8, rNb8, rNb8, rNb8) rDec10 = fmt.Sprintf(`%s?(%s+\.%s*|\.%s+)`, rSign, rNb10, rNb10, rNb10) rDec16 = fmt.Sprintf(`(%s)(%s+\.%s*|\.%s+)`, rBase16, rNb16, rNb16, rNb16) rDecN = fmt.Sprintf(`\(%s+\)%s?(%s+\.%s*|\.%s+)`, rNb10, rSign, rNbN, rNbN, rNbN) rDecB = fmt.Sprintf(`%s(%s|%s|%s)`, rBSign, rDec2, rDec8, rDec16) rDec = fmt.Sprintf(`(%s|%s|%s)`, rDec10, rDecN, rDecB) rExponent10 = fmt.Sprintf(`(%s|%s)(%s)%s?%s+`, rInt10, rDec10, rExp10, rSign, rNb10) rExponentN = fmt.Sprintf(`(%s|%s)%s%s?%s+`, rInt, rDec, rExpN, rSign, rNb10) rAll10 = fmt.Sprintf(`(%s|%s)((%s)%s?%s+)?`, rInt10, rDec10, regExp10, rSign, rNb10) rAllN = fmt.Sprintf(`(%s|%s)(%s%s?%s+)?`, rInt, rDec, rExpN, rSign, rNb10) rAll = fmt.Sprintf(`(%s|%s)`, rAll10, rAllN) ) var ( regInt10 = regexp.MustCompile(fmt.Sprintf(`^%s$`, rInt10)) regIntN = regexp.MustCompile(fmt.Sprintf(`^%s$`, rIntN)) regIntB = regexp.MustCompile(fmt.Sprintf(`^%s$`, rIntB)) regDec = regexp.MustCompile(fmt.Sprintf(`^%s$`, rDec)) regExp10 = regexp.MustCompile(fmt.Sprintf(`^%s$`, rExponent10)) regExpN = regexp.MustCompile(fmt.Sprintf(`^%s$`, rExpN)) regFrac = regexp.MustCompile(fmt.Sprintf(`^%s/%s$`, rAll, rAll)) )