У меня есть две строки, каждая из которых представляет неотрицательное рациональное число в десятичном формате.
Учитывая эти две строки x
и y
, я хотел бы проверить, значение цифр c, представленное x
, больше значения чисел c, представленного y
.
Эти два значения могут быть очень большими, а также расширяться с очень высокой точностью ( т.е. много цифр после десятичной точки).
Поэтому я не могу полагаться на Number(x) > Number(y)
для выполнения этой работы.
Вместо этого я реализовал следующую функцию:
function isLarger(x, y) {
const xParts = x.split(".").concat("");
const yParts = y.split(".").concat("");
xParts[0] = xParts[0].padStart(yParts[0].length, "0");
yParts[0] = yParts[0].padStart(xParts[0].length, "0");
xParts[1] = xParts[1].padEnd (yParts[1].length, "0");
yParts[1] = yParts[1].padEnd (xParts[1].length, "0");
return xParts.join("").localeCompare(yParts.join("")) == 1;
}
Я провел обширное тестирование, сгенерировав случайные данные x
и y
и сравнив результат isLarger(x, y)
со значением выражения Number(x) > Number(y)
.
Конечно По причинам, указанным выше, я не могу полагаться на правильность значения выражения Number(x) > Number(y)
для каждого возможного ввода x
и y
.
Поэтому я хотел бы получить какую-то обратную связь по функция выше:
- в нем есть какие-то предостережения?
- Возможно, есть более простой способ добиться этого?