Skip to content

v0.232.0

Choose a tag to compare

@github-actions github-actions released this 03 Sep 06:12
· 45 commits to main since this release
ec731c6

kanpic v0.232.0

v0.232.0

VALUE 가 사람이 적는 수의 겉모양을 읽는다

가져온 표의 금액 칸은 대개 글자입니다. 1,000, $1,000, (1,000), 12%
모두 사람이 칸에 적는 꼴이고, 그것을 숫자로 바꾸려고 부르는 함수가 VALUE
입니다. 그런데 여태 VALUE1000 같은 맨숫자 글자만 읽고 나머지는 모두
#VALUE! 이었습니다. 자릿점 하나가 붙었다는 이유로 열 전체를 손으로 고쳐야
했고, 달리 쓸 함수도 없었습니다.

이제 이렇게 읽습니다.

  • =VALUE("1,000")1000, =VALUE("1,234.50")1234.5
  • =VALUE("$1,000"), =VALUE("₩12,500"), =VALUE("-$1,234.50") — 통화 기호는
    앞에 와도 뒤에 와도 되고, 부호는 기호의 앞뒤 어느 쪽에 적어도 됩니다.
  • =VALUE("(1,000)")-1000. 회계 서식은 음수를 괄호로 적고, 내보낸 CSV 가
    그 꼴입니다.
  • =VALUE("10%")0.1
  • =VALUE("12:00")0.5, =VALUE("2026-01-05")46027. 시각과 날짜는
    TIMEVALUE·DATEVALUE같은 자로 읽으므로 두 함수의 답이 갈리지
    않습니다.

넓게 읽더라도 수가 아닌 것은 그대로 #VALUE! 입니다. 자릿점 뒤가 세 자리가
아닌 "1,00", "12,34" 는 자릿점인지 소수점인지 알 수 없으므로 읽지 않습니다.
골라 읽으면 열 하나가 통째로 1000배 어긋난 채 조용히 표에 들어갑니다.

셈에 끼어드는 칸의 값은 그대로입니다. =SUM(A1:A3)"1,000" 이라고
적힌 칸을 제멋대로 1000 으로 세지는 않습니다. 그쪽은 사람이 읽어 달라고 부른
적이 없으므로 좁은 채로 둡니다.

NUMBERVALUE 를 더했습니다

나라마다 수를 적는 꼴이 다릅니다. 독일·프랑스에서 내려받은 자료의 1.234,5
는 1234.5 인데, 우리 표기로 읽으면 1.2345 도 아니고 오류입니다. NUMBERVALUE
는 구분 기호를 부르는 쪽이 정하는 유일한 함수입니다.

=NUMBERVALUE("1.234,5", ",", ".")   1234.5
=NUMBERVALUE(" 3 000 ")             3000     가운데 빈칸도 무시합니다
=NUMBERVALUE("9%%")                 0.0009   % 하나마다 100 으로 나눕니다
=NUMBERVALUE("")                    0

소수 구분 기호가 두 번 나오거나, 자릿수 구분 기호가 그 뒤에 오거나, 두 기호가
같으면 #VALUE! 입니다. 엑셀이 정한 규칙 그대로입니다. 엑셀 파일로 내보낼 때는
_xlfn. 접두사를 붙여 나가므로 엑셀에서 열어도 #NAME? 이 되지 않습니다.

2192 년 너머의 날짜가 날 수로 셈된다

날짜를 날 수로 바꾸는 DateSerial 이 두 날짜의 사이를 time.Duration 으로
셌습니다. 나노초를 int64 에 담는 그릇이라 292 년까지만 셀 수 있어서, 1899
년에서 2192 년보다 먼 날을 빼면 조용히 넘쳤습니다. 9999-12-31 은 2958465
여야 하는데 106751(2192-04-08)이 나왔고, 되돌려 읽는 serialDate 는 그 끝까지
제대로 읽고 있었으니 짝이 어긋나 있었습니다. 먼 날짜를 담은 일정표의 막대가
엉뚱한 자리에 그려집니다. 이제 초로 세므로 넘치지 않습니다.

확인

  • internal/formula/text_to_number_test.go
    • TestValueReadsTheShapesPeopleTypeIntoCells — 자릿점·통화·괄호·백분율·시각·날짜 21가지
    • TestValueStillRefusesWhatIsNotANumber"1,00", "--5", "25:00" 처럼 읽지 말아야 할 것
    • TestValueAgreesWithTimeValueAndDateValue — 같은 글자를 TIMEVALUE·serialDate 와 맞대 봄
    • TestNumberValueFollowsTheSeparatorsItIsGiven, TestNumberValueRefusesAmbiguousText — 엑셀 도움말의 규칙 표
    • TestValueOverAColumnOfImportedAmounts — 금액이 든 열에 범위로 걸어 =SUM(VALUE(A1:A4))
  • internal/formula/library_test.go
    • TestDateSerialRoundTripsWithSerialDate2200-01-019999-12-31 을 더해 넘침을 막음

오프라인 설치

이 릴리즈는 웹 자산과 서버 바이너리를 포함한 Docker 이미지 아카이브로 제공됩니다.

sha256sum -c kanpic-v0.232.0.tar.gz.sha256
gzip -dc kanpic-v0.232.0.tar.gz | docker load
docker run --rm -p 8080:8080 \
  -e POSTGRES_DSN='postgres://kanpic:password@postgres.internal:5432/kanpic?sslmode=require' \
  kanpic:v0.232.0
  • 필수 런타임 환경 변수: POSTGRES_DSN
  • Redis 및 외부 인터넷 연결: 불필요
  • 관리자 초기 로그인을 보호하려면 BOOTSTRAP_ADMIN_IDBOOTSTRAP_ADMIN_PASSWORD를 함께 지정합니다.
  • 무결성 검증 파일: kanpic-v0.232.0.tar.gz.sha256