시간의 분 부분을 십진수로 변환
시간 계산기 앱을 만들고 있습니다. 시작 시간, 종료 시간 및 점심 시간이 걸립니다.
시작 및 종료 시간의 경우 4 자리 hh : mm 시간이 걸립니다. 예 : 10:20.
시간을 십진수로 변환하는 함수를 만들었으므로 10:20 = 10.33입니다. 기능은 작동하지만 조금 무거워 보이며 누군가 내가 어떻게 더 잘 만들 수 있는지에 대한 제안이 있는지 궁금합니다.
const minuteConverter = time => {
let h = Number(time.split(':')[0]);
let m = Math.round((1 / 60 * (Number(time.split(':')[1])) + Number.EPSILON) * 100) / 100;
let mConverted = Number(m.toString().split('.')[1])
return Number(`${h}.${mConverted}`)
};
console.log(minuteConverter('10:20'))
시간은 소수점 둘째 자리까지의 숫자로 출력되어야합니다. 예를 들면
- '10 : 20 '>> 10.33
- '9:45'>> 9.75
- '15 : 33 '>> 15.55
답변
값이 변경되지 않으면
const대신 사용let하여 변수를 선언 하십시오 .time.split(':')두 번 실행하고 있습니다.문자열을 숫자로 변환하는 짧은 방법은 단항
+입니다.JavaScript에는
toFixed()숫자를 고정 된 자릿수로 포맷하는 방법이 있습니다.
function minuteConverter(time) {
const [h, m] = time.split(':');
const value = +h + +m / 60;
return value.toFixed(2);
}
더 간단한 기술
6 년 전 스택 오버플 로 에서이 동일한 질문에 대한 답변에 따라 분 변환 공식이 그렇게 복잡 할 필요는 없습니다. 많은 답변이 parseInt()문자열에서 숫자를 구문 분석 하는 데 사용 되지만 더 빠른 작업과 더 간단한 구문을 위해 대신 단항 더하기 연산자를 + 사용할 수 있습니다 ( 더 많은 컨텍스트 를 위해 parseInt 대 단항 더하기, 언제 사용할지? 참조).
분은 60으로 나눌 수 있으며 Number. 이 메서드 Number.toFixed()는 부동 소수점 수를 지정된 자릿수로 제한하는 데 사용할 수 있습니다.
ES-6 변수 선언
ES6 키워드가 좋아하기 때문에 let사용하는 배열 destructuring는 값을 할당 할 수 있습니다 h및 m받는 추가 호출 방지 한 표현의 split()방법을. 이것은 const우발적 인 재 할당을 방지하는 데 도움이되는 좋은 습관입니다.
화살표 기능 블록 뒤에 추가 종료 자
여러 줄 화살표 함수 표현식 은 본문 뒤에 세미콜론이 필요하지 않지만, 특히 자동 세미콜론 삽입 규칙에 익숙하지 않은 경우 끝에 세미콜론이 있어도 문제가되지 않습니다 .
단순화 된 코드
단순화 할 수있는 한 가지 방법이 있습니다.
const minuteConverter = time => {
const [h, m] = time.split(':');
return (+h + (+m/60)).toFixed(2);
};
['9:45', '10:03', '10:20', '15:33'].forEach(
time => console.log(time, ' >> ', minuteConverter(time))
)
더 나은 것은 상대적입니다! 그 코드를 작성하는 많은 방법.
개인적으로 다른 답변이 강조한 것처럼 간결하고 정확한 코드를 선호하지만 (여기에 내 의견이 있습니다) :
const minuteConverter = time => [time.split(':')]
.map(([hour, minute]) => +(+hour + +minute / 60).toFixed(2))[0]
플러스는 약간 바쁠 수 있으므로 여기에 더 설명적인 / 산술 밀도가있는 버전도 있습니다.
const minuteConverter = time => [time.split(':')]
.map(([hh, mm]) => [+hh, mm / 60])
.reduce((hundred, [hours, minutes]) => Math.round((hours + minutes) * hundred) / hundred, 100)
ES6 +대신 사용하십시오 Number().
대신에 let또는 var이 변수의 값이 변경되지 않을 경우 const를 사용하십시오 .
분해 할당을 사용하여 배열에서 변수를 만듭니다 let [h,m] = time.split(/[.:]/).
시간 변수에 시간 이 추가 되는 경우에도 10:30또는 을 허용 합니다.10.30.300
const timeStringToFloatMm = time => {
let [h,m] = time.split(/[.:]/);
h = h || 0;
return (+h + +m / 60).toFixed(2);
}