def nice_number_it(number, speech, denominators): """ Italian helper for nice_number This function formats a float to human understandable functions. Like 4.5 becomes "4 e un mezz" for speech and "4 1/2" for text Args: number (int or float): the float to format speech (bool): format for speech (True) or display (False) denominators (iter of ints): denominators to use, default [1 .. 20] Returns: (str): The formatted string. """ result = convert_to_mixed_fraction(number, denominators) if not result: # Give up, just represent as a 3 decimal number return str(round(number, 3)) whole, num, den = result if not speech: if num == 0: # TODO: Number grouping? E.g. "1,000,000" return str(whole) else: return '{} {}/{}'.format(whole, num, den) if num == 0: return str(whole) # denominatore den_str = FRACTION_STRING_IT[den] # frazione if whole == 0: if num == 1: # un decimo return_string = 'un {}'.format(den_str) else: # tre mezzi return_string = '{} {}'.format(num, den_str) # interi >10 elif num == 1: # trenta e un return_string = '{} e un {}'.format(whole, den_str) # interi >10 con frazioni else: # venti e 3 decimi return_string = '{} e {} {}'.format(whole, num, den_str) # gestisce il plurale del denominatore if num > 1: return_string += 'i' else: return_string += 'o' return return_string
def nice_number_pt(number, speech, denominators): """ Portuguese helper for nice_number This function formats a float to human understandable functions. Like 4.5 becomes "4 e meio" for speech and "4 1/2" for text Args: number (int or float): the float to format speech (bool): format for speech (True) or display (False) denominators (iter of ints): denominators to use, default [1 .. 20] Returns: (str): The formatted string. """ result = convert_to_mixed_fraction(number, denominators) if not result: # Give up, just represent as a 3 decimal number return str(round(number, 3)) whole, num, den = result if not speech: if num == 0: # TODO: Number grouping? E.g. "1,000,000" return str(whole) else: return '{} {}/{}'.format(whole, num, den) if num == 0: return str(whole) # denominador den_str = FRACTION_STRING_PT[den] # fracções if whole == 0: if num == 1: # um décimo return_string = 'um {}'.format(den_str) else: # três meio return_string = '{} {}'.format(num, den_str) # inteiros >10 elif num == 1: # trinta e um return_string = '{} e {}'.format(whole, den_str) # inteiros >10 com fracções else: # vinte e 3 décimo return_string = '{} e {} {}'.format(whole, num, den_str) # plural if num > 1: return_string += 's' return return_string
def nice_number_sv(number, speech, denominators): """ Swedish helper for nice_number This function formats a float to human understandable functions. Like 4.5 becomes "4 och en halv" for speech and "4 1/2" for text Args: number (int or float): the float to format speech (bool): format for speech (True) or display (False) denominators (iter of ints): denominators to use, default [1 .. 20] Returns: (str): The formatted string. """ result = convert_to_mixed_fraction(number, denominators) if not result: # Give up, just represent as a 3 decimal number return str(round(number, 3)) whole, num, den = result if not speech: if num == 0: # TODO: Number grouping? E.g. "1,000,000" return str(whole) else: return '{} {}/{}'.format(whole, num, den) if num == 0: return str(whole) den_str = FRACTION_STRING_SV[den] if whole == 0: if num == 1: return_string = 'en {}'.format(den_str) else: return_string = '{} {}'.format(num, den_str) elif num == 1: return_string = '{} och en {}'.format(whole, den_str) else: return_string = '{} och {} {}'.format(whole, num, den_str) if num == 2: return_string += 'a' if num > 2: return_string += 'ar' return return_string
def nice_number_fr(number, speech, denominators): """ French helper for nice_number This function formats a float to human understandable functions. Like 4.5 becomes "4 et demi" for speech and "4 1/2" for text Args: number (int or float): the float to format speech (bool): format for speech (True) or display (False) denominators (iter of ints): denominators to use, default [1 .. 20] Returns: (str): The formatted string. """ strNumber = "" whole = 0 num = 0 den = 0 result = convert_to_mixed_fraction(number, denominators) if not result: # Give up, just represent as a 3 decimal number whole = round(number, 3) else: whole, num, den = result if not speech: if num == 0: strNumber = '{:,}'.format(whole) strNumber = strNumber.replace(",", " ") strNumber = strNumber.replace(".", ",") return strNumber else: return '{} {}/{}'.format(whole, num, den) else: if num == 0: # if the number is not a fraction, nothing to do strNumber = str(whole) strNumber = strNumber.replace(".", ",") return strNumber den_str = FRACTION_STRING_FR[den] # if it is not an integer if whole == 0: # if there is no whole number if num == 1: # if numerator is 1, return "un demi", for example strNumber = 'un {}'.format(den_str) else: # else return "quatre tiers", for example strNumber = '{} {}'.format(num, den_str) elif num == 1: # if there is a whole number and numerator is 1 if den == 2: # if denominator is 2, return "1 et demi", for example strNumber = '{} et {}'.format(whole, den_str) else: # else return "1 et 1 tiers", for example strNumber = '{} et 1 {}'.format(whole, den_str) else: # else return "2 et 3 quart", for example strNumber = '{} et {} {}'.format(whole, num, den_str) if num > 1 and den != 3: # if the numerator is greater than 1 and the denominator # is not 3 ("tiers"), add an s for plural strNumber += 's' return strNumber