28 lines
629 B
TypeScript
28 lines
629 B
TypeScript
import type { Portfolio } from "../api/usePortfolio";
|
|
|
|
const PERCENT_SCALE = 100;
|
|
|
|
type Money = Portfolio["totals"];
|
|
|
|
function formatShare(
|
|
numerator: Money | null,
|
|
denominator: Money | null,
|
|
): null | string {
|
|
if (!numerator || !denominator)
|
|
return null;
|
|
const total = Number(denominator.value);
|
|
if (!Number.isFinite(total) || total <= 0)
|
|
return null;
|
|
const percent = (Number(numerator.value) / total) * PERCENT_SCALE;
|
|
if (!Number.isFinite(percent))
|
|
return null;
|
|
|
|
const rounded = new Intl.NumberFormat("ru-RU", {
|
|
maximumFractionDigits: 1,
|
|
}).format(percent);
|
|
|
|
return `${rounded} %`;
|
|
}
|
|
|
|
export { formatShare };
|