Correct derived briefing weather semantics

This commit is contained in:
2026-08-13 00:58:04 +00:00
parent 9b4e53702b
commit daf0c7efd7
5 changed files with 215 additions and 26 deletions

View File

@@ -301,18 +301,8 @@ func celsiusToFahrenheit(value float64) float64 {
}
func temperatureBandIndex(value int) int {
decade := (value / 10) * 10
remainder := value - decade
if remainder < 0 {
remainder = -remainder
}
band := 1
switch {
case remainder <= 3:
band = 0
case remainder >= 7:
band = 2
}
decade, remainder := temperatureBandParts(value)
band := temperatureBandQualifierIndex(remainder)
return decade*3 + band
}
@@ -348,19 +338,47 @@ func temperaturePhraseF(value forecast.Range) string {
}
func temperatureBandPhrase(value int) string {
decade := (value / 10) * 10
remainder := value - decade
if remainder < 0 {
remainder = -remainder
if value < 0 {
decade, remainder := temperatureBandParts(-value)
qualifier := temperatureBandQualifier(remainder)
if decade == 0 {
return fmt.Sprintf("%s single digits below zero", qualifier)
}
return fmt.Sprintf("%s %ds below zero", qualifier, decade)
}
qualifier := "mid"
decade, remainder := temperatureBandParts(value)
qualifier := temperatureBandQualifier(remainder)
return fmt.Sprintf("%s %ds", qualifier, decade)
}
func temperatureBandParts(value int) (int, int) {
decade := value / 10
if value < 0 && value%10 != 0 {
decade--
}
return decade * 10, value - decade*10
}
func temperatureBandQualifierIndex(remainder int) int {
switch {
case remainder <= 3:
qualifier = "low"
return 0
case remainder >= 7:
qualifier = "upper"
return 2
default:
return 1
}
}
func temperatureBandQualifier(remainder int) string {
switch temperatureBandQualifierIndex(remainder) {
case 0:
return "low"
case 2:
return "upper"
default:
return "mid"
}
return fmt.Sprintf("%s %ds", qualifier, decade)
}
func sentenceCase(value string) string {