| | |
| | | void formatsTableRatiosAsSignedPercentages() throws Exception { |
| | | HolidayBulletinService service = new HolidayBulletinService(null); |
| | | |
| | | assertEquals("-4.7%", ratio(service, "95.3", "100")); |
| | | assertEquals("1.0%", ratio(service, "101", "100")); |
| | | assertEquals("0%", ratio(service, "100", "100")); |
| | | assertEquals("0%", ratio(service, "10004", "10000")); |
| | | assertEquals("—", ratio(service, "100", null)); |
| | | assertEquals("—", ratio(service, "100", "0")); |
| | | assertEquals("-4.7%", ratio(service, "95.3", "100", 1)); |
| | | assertEquals("-4.4%", ratio(service, "95.551398", "100", 1)); |
| | | assertEquals("-4.5%", ratio(service, "95.551398", "100", 2)); |
| | | assertEquals("-0.1%", ratio(service, "99.955", "100", 2)); |
| | | assertEquals("0%", ratio(service, "99.955", "100", 1)); |
| | | assertEquals("6.7%", ratio(service, "106.649", "100", 2)); |
| | | assertEquals("6.6%", ratio(service, "106.649", "100", 1)); |
| | | assertEquals("1.0%", ratio(service, "101", "100", 1)); |
| | | assertEquals("0%", ratio(service, "100", "100", 1)); |
| | | assertEquals("0%", ratio(service, "10004", "10000", 1)); |
| | | assertEquals("—", ratio(service, "100", null, 1)); |
| | | assertEquals("—", ratio(service, "100", "0", 1)); |
| | | } |
| | | |
| | | @Test |
| | |
| | | } |
| | | |
| | | @Test |
| | | void cumulativeParagraphUsesWanUnitAndSingleRounding() throws Exception { |
| | | void cumulativeParagraphUsesExcelDisplayThenBulletinRounding() throws Exception { |
| | | HolidayBulletinService service = new HolidayBulletinService(null); |
| | | |
| | | DailyMetrics current = new DailyMetrics(); |
| | |
| | | String text = (String) method.invoke(service, current, previousYear, twoYearsAgo); |
| | | |
| | | assertEquals( |
| | | "假期以来,全省全社会跨区域人员流动量累计3088.63万人次,比2025年同期下降4.4%,比2024年同期下降1.6%。", |
| | | "假期以来,全省全社会跨区域人员流动量累计3088.63万人次,比2025年同期下降4.5%,比2024年同期下降1.6%。", |
| | | text); |
| | | } |
| | | |
| | | @Test |
| | | void cumulativeAmountsUseExcelYiDisplayBeforeWanRounding() throws Exception { |
| | | HolidayBulletinService service = new HolidayBulletinService(null); |
| | | |
| | | assertEquals("3961.77", cumulativeNumber(service, "3961.76472")); |
| | | assertEquals("4189.32", cumulativeNumber(service, "4189.31472")); |
| | | assertEquals("4486.63", cumulativeNumber(service, "4486.62652")); |
| | | } |
| | | |
| | | private String cumulativeNumber(HolidayBulletinService service, String value) throws Exception { |
| | | Method method = HolidayBulletinService.class.getDeclaredMethod("numberCumulative", BigDecimal.class); |
| | | method.setAccessible(true); |
| | | BigDecimal number = value == null ? null : new BigDecimal(value); |
| | | return (String) method.invoke(service, number); |
| | | } |
| | | |
| | | private Object comparableCumulative(HolidayBulletinService service, DailyMetrics current, |
| | |
| | | return method.invoke(service, current, comparisonYear, selector); |
| | | } |
| | | |
| | | private String ratio(HolidayBulletinService service, String current, String base) throws Exception { |
| | | Method method = HolidayBulletinService.class.getDeclaredMethod("ratio", BigDecimal.class, BigDecimal.class); |
| | | private String ratio(HolidayBulletinService service, String current, String base, |
| | | int excelPercentScale) throws Exception { |
| | | Method method = HolidayBulletinService.class.getDeclaredMethod( |
| | | "ratio", BigDecimal.class, BigDecimal.class, int.class); |
| | | method.setAccessible(true); |
| | | BigDecimal currentValue = current == null ? null : new BigDecimal(current); |
| | | BigDecimal baseValue = base == null ? null : new BigDecimal(base); |
| | | return (String) method.invoke(service, currentValue, baseValue); |
| | | return (String) method.invoke(service, currentValue, baseValue, excelPercentScale); |
| | | } |
| | | } |