seitime-frappe/frappe/utils/number_format.py

36 lines
850 B
Python

from dataclasses import dataclass
NUMBER_FORMAT_MAP = {
"#,###.##": (".", ",", 2),
"#.###,##": (",", ".", 2),
"# ###.##": (".", " ", 2),
"# ###,##": (",", " ", 2),
"#'###.##": (".", "'", 2),
"#, ###.##": (".", ", ", 2),
"#,##,###.##": (".", ",", 2),
"#,###.###": (".", ",", 3),
"#.###": ("", ".", 0),
"#,###": ("", ",", 0),
"#.########": (".", "", 8),
}
@dataclass
class NumberFormat:
precision: int
decimal_separator: str
thousands_separator: str
string: str
@classmethod
def from_string(cls, number_format: str) -> "NumberFormat":
decimal_separator, thousands_separator, precision = NUMBER_FORMAT_MAP[number_format]
return NumberFormat(
precision=precision,
decimal_separator=decimal_separator,
thousands_separator=thousands_separator,
string=number_format,
)
def __str__(self) -> str:
return self.string