import styles from "./starRating.module.scss";
type Props = { score: number; showsScore?: boolean };
const MAX_STAR_COUNT = 5;
export default function StarRating({ score, showsScore = true }: Props) {
const starPaths: JSX.Element[] = [];
for (let i = 0; i < MAX_STAR_COUNT; i++) {
if (i < Math.floor(score)) {
starPaths.push(createStarPath(10, i)); // 100%の星
if (i > Math.floor(score)) {
starPaths.push(createStarPath(0, i)); // 0%の星
const scoreFraction = Math.round((score - Math.trunc(score)) * 10); // 小数第一位以下の値
starPaths.push(createStarPath(scoreFraction, i));
<div className={styles.module}>
xmlns="http://www.w3.org/2000/svg"
aria-label={`${MAX_STAR_COUNT}点中${score}点の評価`}
{showsScore && <span className={styles.score}>{score.toFixed(1)}</span>}
function createStarPath(percent: number, index: number) {
if (percent < 0 || percent > 10) return <></>;
transform: `translate(${index * 100 + 10 * index})`,
"M100 40.4c0-5.1-4-9.3-8.9-9.3h-25L58.5 6.4C57 1.6 52-1.1 47.3.4c-2.7.9-4.9 3.2-5.7 6l3.8 1.3-3.8-1.3L34 31.1H9c-3.9 0-7.3 2.6-8.5 6.4s.1 8 3.3 10.4L24 63.1l-7.8 24.7c-1.2 3.8.1 8 3.2 10.4s7.4 2.4 10.5 0L50 82.8l20.1 15.4c3.1 2.4 7.4 2.4 10.5 0 3.1-2.4 4.4-6.6 3.2-10.4L76 63.1 96.3 48c2.3-1.8 3.7-4.6 3.7-7.6zm-8.4.7-22.7 17c-1.4 1.1-2 3-1.5 4.7l8.7 27.6v.3c0 .3-.1.5-.4.7-.3.2-.7.2-1 0L52.4 74.2c-1.4-1.1-3.4-1.1-4.8 0L25.1 91.4c-.4.3-.9.2-1.1-.2-.1-.1-.2-.3-.2-.5v-.3l8.7-27.6c.5-1.8 0-3.7-1.5-4.7l-22.7-17c-.2-.2-.4-.4-.4-.7v-.3c.1-.3.4-.6.8-.6h27.9c1.8 0 3.3-1.2 3.8-2.9L49.2 9c.1-.4.6-.7 1-.5.3.1.4.3.5.5l8.5 27.6c.5 1.8 2.1 2.9 3.8 2.9h27.9c.4 0 .7.2.8.6v.3c.2.3.1.5-.1.7z",
"M91.1 31.1h-25L58.5 6.4C57 1.6 52-1.1 47.3.4c-2.7.9-4.9 3.2-5.7 6L34 31.1H9c-3.9 0-7.3 2.6-8.5 6.4s.1 8 3.3 10.4L24 63.1l-7.8 24.7c-1.2 3.8.1 8 3.2 10.4 3.1 2.4 7.4 2.4 10.5 0L50 82.8l20.1 15.4c3.1 2.4 7.4 2.4 10.5 0 3.1-2.4 4.4-6.6 3.2-10.4L76 63.1 96.3 48c2.3-1.8 3.7-4.6 3.7-7.6 0-5.1-4-9.3-8.9-9.3zm.5 10-22.7 17c-1.4 1.1-2 3-1.5 4.7l8.7 27.6v.3c0 .3-.1.5-.4.7-.3.2-.7.2-1 0L52.4 74.2c-1.4-1.1-3.4-1.1-4.8 0L25.1 91.4c-.4.3-.9.2-1.1-.2-.1-.1-.2-.3-.2-.5v-.3l8.7-27.6c.5-1.8 0-3.7-1.5-4.7l-22.7-17-.2-.2 8.3 6.2v-7.6h20.2c1.8 0 3.3-1.2 3.8-2.9L49.2 9c.1-.4.6-.7 1-.5.3.1.4.3.5.5l8.5 27.6c.5 1.8 2.1 2.9 3.8 2.9h27.9c.4 0 .7.2.8.6v.3c.2.3.1.5-.1.7z",
"M91.1 31.1h-25L58.5 6.4C57 1.6 52-1.1 47.3.4c-2.7.9-4.9 3.2-5.7 6L34 31.1H9c-3.9 0-7.3 2.6-8.5 6.4s.1 8 3.3 10.4L24 63.1l-7.8 24.7c-1.2 3.8.1 8 3.2 10.4 3.1 2.4 7.4 2.4 10.5 0L50 82.8l20.1 15.4c3.1 2.4 7.4 2.4 10.5 0 3.1-2.4 4.4-6.6 3.2-10.4L76 63.1 96.3 48c2.3-1.8 3.7-4.6 3.7-7.6 0-5.1-4-9.3-8.9-9.3zm.5 10-22.7 17c-1.4 1.1-2 3-1.5 4.7l8.7 27.6v.3c0 .3-.1.5-.4.7-.3.2-.7.2-1 0L52.4 74.2c-1.4-1.1-3.4-1.1-4.8 0L25.1 91.4c-.4.3-.9.2-1.1-.2-.1-.1-.2-.3-.2-.5v-.3l8.7-27.6c.5-1.8 0-3.7-1.5-4.7l-22.7-17-.2-.2 16.6 12.4V39.5h11.9c1.8 0 3.3-1.2 3.8-2.9L49.2 9c.1-.4.6-.7 1-.5.3.1.4.3.5.5l8.5 27.6c.5 1.8 2.1 2.9 3.8 2.9h27.9c.4 0 .7.2.8.6v.3c.2.3.1.5-.1.7z",
"M91.1 31.1h-25L58.5 6.4C57 1.6 52-1.1 47.3.4c-2.7.9-4.9 3.2-5.7 6L34 31.1H9c-3.9 0-7.3 2.6-8.5 6.4s.1 8 3.3 10.4L24 63.1l-7.8 24.7c-1.2 3.8.1 8 3.2 10.4 3.1 2.4 7.4 2.4 10.5 0L50 82.8l20.1 15.4c3.1 2.4 7.4 2.4 10.5 0 3.1-2.4 4.4-6.6 3.2-10.4L76 63.1 96.3 48c2.3-1.8 3.7-4.6 3.7-7.6 0-5.1-4-9.3-8.9-9.3zM24.8 91.5l.1-.1v.1c-.1 0-.2.1-.2.1l.1-.1zm66.8-50.4-22.7 17c-1.4 1.1-2 3-1.5 4.7l8.7 27.6v.3c0 .3-.1.5-.4.7-.3.2-.7.2-1 0L52.4 74.2c-1.4-1.1-3.4-1.1-4.8 0L33.3 85.1V39.5h3.3c1.8 0 3.3-1.2 3.8-2.9L49.2 9c.1-.4.6-.7 1-.5.3.1.4.3.5.5l8.5 27.6c.5 1.8 2.1 2.9 3.8 2.9h27.9c.4 0 .7.2.8.6v.3c.2.3.1.5-.1.7z",
"M91.1 31.1h-25L58.5 6.4C57 1.6 52-1.1 47.3.4c-2.7.9-4.9 3.2-5.7 6L34 31.1H9c-3.9 0-7.3 2.6-8.5 6.4s.1 8 3.3 10.4L24 63.1l-7.8 24.7c-1.2 3.8.1 8 3.2 10.4 3.1 2.4 7.4 2.4 10.5 0L50 82.8l20.1 15.4c3.1 2.4 7.4 2.4 10.5 0 3.1-2.4 4.4-6.6 3.2-10.4L76 63.1 96.3 48c2.3-1.8 3.7-4.6 3.7-7.6 0-5.1-4-9.3-8.9-9.3zM24.4 91.5h.3c0 .1-.1.1-.3 0zm67.2-50.4-22.7 17c-1.4 1.1-2 3-1.5 4.7l8.7 27.6v.3c0 .3-.1.5-.4.7-.3.2-.7.2-1 0L52.4 74.2c-1.4-1.1-3.4-1.1-4.8 0l-5.8 4.4V32.2L49.2 9c.1-.4.6-.7 1-.5.3.1.4.3.5.5l8.5 27.6c.5 1.8 2.1 2.9 3.8 2.9h27.9c.4 0 .7.2.8.6v.3c.2.3.1.5-.1.7z",
"M91.1 31.1h-25L58.5 6.4C57 1.6 52-1.1 47.3.4c-2.7.9-4.9 3.2-5.7 6L34 31.1H9c-3.9 0-7.3 2.6-8.5 6.4s.1 8 3.3 10.4L24 63.1l-7.8 24.7c-1.2 3.8.1 8 3.2 10.4 3.1 2.4 7.4 2.4 10.5 0L50 82.8l20.1 15.4c3.1 2.4 7.4 2.4 10.5 0 3.1-2.4 4.4-6.6 3.2-10.4L76 63.1 96.3 48c2.3-1.8 3.7-4.6 3.7-7.6 0-5.1-4-9.3-8.9-9.3zm.5 10-22.7 17c-1.4 1.1-2 3-1.5 4.7l8.7 27.6v.3c0 .3-.1.5-.4.7-.3.2-.7.2-1 0L52.4 74.2c-.6-.5-1.4-.8-2.2-.8l-.1-64.9h.1c.3.1.4.3.5.5l8.5 27.6c.5 1.8 2.1 2.9 3.8 2.9h27.9c.4 0 .7.2.8.6v.3c.2.3.1.5-.1.7z",
"M91.1 31.1h-25L58.5 6.4C57 1.6 52-1.1 47.3.4c-2.7.9-4.9 3.2-5.7 6L34 31.1H9c-3.9 0-7.3 2.6-8.5 6.4s.1 8 3.3 10.4L24 63.1l-7.8 24.7c-1.2 3.8.1 8 3.2 10.4 3.1 2.4 7.4 2.4 10.5 0L50 82.8l20.1 15.4c3.1 2.4 7.4 2.4 10.5 0 3.1-2.4 4.4-6.6 3.2-10.4L76 63.1 96.3 48c2.3-1.8 3.7-4.6 3.7-7.6 0-5.1-4-9.3-8.9-9.3zM25.7 84.5l-1.9 6.1v-.2l1.9-5.9zm65.9-43.4-22.7 17c-1.4 1.1-2 3-1.5 4.7l8.7 27.6v.3c0 .3-.1.5-.4.7-.3.2-.7.2-1 0L58.3 78.8V33.7l.9 2.9c.5 1.8 2.1 2.9 3.8 2.9h27.9c.4 0 .7.2.8.6v.3c.2.3.1.5-.1.7z",
"M91.1 31.1h-25L58.5 6.4C57 1.6 52-1.1 47.3.4c-2.7.9-4.9 3.2-5.7 6L34 31.1H9c-3.9 0-7.3 2.6-8.5 6.4s.1 8 3.3 10.4L24 63.1l-7.8 24.7c-1.2 3.8.1 8 3.2 10.4 3.1 2.4 7.4 2.4 10.5 0L50 82.8l20.1 15.4c3.1 2.4 7.4 2.4 10.5 0 3.1-2.4 4.4-6.6 3.2-10.4L76 63.1 96.3 48c2.3-1.8 3.7-4.6 3.7-7.6 0-5.1-4-9.3-8.9-9.3zm.5 10-22.7 17c-1.4 1.1-2 3-1.5 4.7l8.7 27.6v.3c0 .3-.1.5-.4.7-.3.2-.7.2-1 0l-8.1-6.2V39.5h24.3c.4 0 .7.2.8.6v.3c.2.3.1.5-.1.7z",
"M91.1 31.1h-25L58.5 6.4C57 1.6 52-1.1 47.3.4c-2.7.9-4.9 3.2-5.7 6L34 31.1H9c-3.9 0-7.3 2.6-8.5 6.4s.1 8 3.3 10.4L24 63.1l-7.8 24.7c-1.2 3.8.1 8 3.2 10.4 3.1 2.4 7.4 2.4 10.5 0L50 82.8l20.1 15.4c3.1 2.4 7.4 2.4 10.5 0 3.1-2.4 4.4-6.6 3.2-10.4L76 63.1 96.3 48c2.3-1.8 3.7-4.6 3.7-7.6 0-5.1-4-9.3-8.9-9.3zm-31.9 5.5c0 .2.1.3.2.5-.2-.3-.4-.7-.5-1.1l-5.3-17.7 5.6 18.3zm16.9 53.8v.5l-8.6-27.6c-.1-.3-.1-.6-.2-.9 0 .1 0 .3.1.4l8.7 27.6zm15.5-49.3L75.2 53.4V39.5h15.7c.4 0 .7.2.8.6v.3c.2.3.1.5-.1.7z",
"M91.1 31.1h-25L58.5 6.4C57 1.6 52-1.1 47.3.4c-2.7.9-4.9 3.2-5.7 6L34 31.1H9c-3.9 0-7.3 2.6-8.5 6.4s.1 8 3.3 10.4L24 63.1l-7.8 24.7c-1.2 3.8.1 8 3.2 10.4 3.1 2.4 7.4 2.4 10.5 0L50 82.8l20.1 15.4c3.1 2.4 7.4 2.4 10.5 0 3.1-2.4 4.4-6.6 3.2-10.4L76 63.1 96.3 48c2.3-1.8 3.7-4.6 3.7-7.6 0-5.1-4-9.3-8.9-9.3zm.5 10L79.7 50V39.5h11.2c.4 0 .7.2.8.6v.3c.2.3.1.5-.1.7z",
"M99.6 37.6c-1.2-3.8-4.6-6.4-8.5-6.4h-25L58.5 6.4C57 1.6 52-1.1 47.3.5c-2.7.9-4.9 3.2-5.7 6L34 31.2H9c-3.9 0-7.3 2.6-8.5 6.4-1.2 3.8.1 8 3.3 10.4L24 63.1l-7.8 24.7c-1.2 3.8.1 8 3.2 10.4 3.1 2.4 7.4 2.4 10.5 0L50 82.8l20.1 15.4c3.1 2.4 7.4 2.4 10.5 0 3.1-2.4 4.4-6.6 3.2-10.4L76 63.1 96.3 48c2.3-1.8 3.7-4.6 3.7-7.6 0-.9-.1-1.9-.4-2.8z",