#10000. 「一本通 1.1 例 1」活动安排

#10000. 「一本通 1.1 例 1」活动安排(题目链接)

区间不能重叠的贪心

贪心基础题,按电影结束的时间贪心就完了。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3+500;
pair<int,int> mp[maxn];
int n,m;
int main(){
    scanf("%d",&n);
    for(int i=0;i<n;++i) scanf("%d%d",&mp[i].second,&mp[i].first);
    sort(mp,mp+n);
    m = 0;
    int ans = 0;
    for(int i=0;i<n;++i){
        if(mp[i].second>=m){
            ans++;
            m = mp[i].first;
        }
    }
    printf("%d\n",ans);
    return 0;
}

<think>我们面临的需求:在Thymeleaf中将数值格式化为以万元为单位,并显示为##,###.##格式(即整数部分每三位用逗号分隔,保留两位小数)。思路:1.Thymeleaf本身支持数字格式化,但默认不支持万元单位转换(除以10000)。2.我们需要先对数值进行除以10000的操作,然后按照指定格式显示。解决方案:方案一:在数据模型传递之前,在服务端将数值转换为以万元为单位,然后在Thymeleaf中直接使用#numbers.formatDecimal进行格式化。方案二:在Thymeleaf表达式中进行数学运算(除以10000),然后格式化。考虑到Thymeleaf表达式可以进行简单数学运算,我们选择方案二。具体步骤:1.使用Thymeleaf的表达式将原数值除以10000,转换为万元单位。2.使用#numbers.formatDecimal方法,并指定格式。注意:格式模式字符串为##,###.##。示:假设我们有一个数值变量`amount`,其值为12345678.9(单位:元),我们想转换为1234.57万元(保留两位小数,四舍五入)。在Thymeleaf模板中:```html<spanth:text="${#numbers.formatDecimal(amount/10000,0,&#39;COMMA&#39;,2,&#39;POINT&#39;)}"></span>```参数解释:-第一个参数:要格式化的数值(这里我们过`amount/10000`转换为万元)-第二个参数:整数部分最小位数(0表示不补零)-第三个参数:整数部分的分组分隔符(这里用逗号)-第四个参数:小数部分最大位数(这里指定2位小数)-第五个参数:小数部分的分隔符(这里用点)但是,注意:我们想要的格式是##,###.##,即整数部分不强制位数(所以最小位数为0),小数部分保留两位(但不足两位时不补零,最多两位)。然而,上述方法在整数部分如果位数超过格式中指定的#号数量,会显示所有位数(因为#代表可选数字),所以整数部分的分组(逗号分隔)会按照每三位进行,符合要求。但是,上述方法有一个问题:小数部分如果不足两位,不会补零。如,1234.5会显示为1,234.5,而我们希望显示1,234.50,则不能使用这种方法。如果我们希望小数部分固定两位(不足补零),则应该使用以下格式:格式字符串:`#,##0.00`因此,我们可以使用另一种重载方法,直接传入格式字符串:```html<spanth:text="${#numbers.formatDecimal(amount/10000,3,&#39;COMMA&#39;,2,&#39;POINT&#39;)}"></span>```但注意,Thymeleaf的`#numbers.formatDecimal`方法没有直接接受格式字符串的重载。所以我们需要使用`#numbers.formatDecimal`的另一个重载,它接受一个格式模式字符串:实际上,Thymeleaf提供了两种格式化数字的方式:1.使用`#numbers.formatDecimal(number,minIntegerDigits,decimalSeparator,maxFractionDigits,minFractionDigits)`2.使用`#numbers.formatDecimal(number,pattern)`这里,我们选择第二种,因为我们可以直接使用Java的DecimalFormat模式字符串。所以,我们可以这样写:```html<spanth:text="${#numbers.formatDecimal(amount/10000,&#39;#,##0.##&#39;)}"></span>```但是,这个格式字符串`#,##0.##`表示:-整数部分:至少一位(用0表示,不足一位时显示0),并且每三位用逗号分隔。-小数部分:最多两位,不足两位不补零。然而,我们要求小数部分保留两位,如果不足两位则补零?还是不补零?根据问题要求:采用##,###.##格式,这个格式小数部分是不补零的。但是,如果我们需要小数部分固定两位(即不足两位补零),则应该使用`#,##0.00`。根据问题要求,我们需要的是##,###.##,即小数部分最多两位,不补零。所以使用`#,##0.##`即可。但是注意:整数部分我们使用了0(一位)而不是#(零位或多位),这是因为如果整数部分为0,我们希望显示0,而不是什么都不显示。所以格式字符串中整数部分使用0是合理的。另外,我们也可以使用格式字符串`##,###.##`,但是注意,在Java的DecimalFormat中,分组分隔符(逗号)的位置是有讲究的。常,我们在整数部分最后三位之前开始分组。所以格式字符串常写成`#,##0.##`,其中第一个逗号表示分组的位置(每三位)。所以,我们使用`#,##0.##`作为格式字符串。示代码:```html<spanth:text="${#numbers.formatDecimal(amount/10000,&#39;#,##0.##&#39;)}"></span>```测试:输入:12345678.9->除以10000后为1234.56789->格式化为1,234.57(四舍五入到两位小数)输入:10000->1->格式化为1输入:12345->1.2345->格式化为1.23(注意,四舍五入到两位小数?不,格式字符串是两位小数,所以会四舍五入)注意:Thymeleaf的`#numbers.formatDecimal`方法在格式化时使用四舍五入模式(RoundingMode.HALF_EVEN)。如果我们需要精确控制舍入模式,可能需要在后端处理,或者使用自定义工具。但是,根据需求,我们使用上述方法即可。另外,如果数值很大,整数部分超过三位分组,如:1234567890->除以10000后为123456.789->格式化为123,456.79(注意分组是每三位)。所以,满足要求。总结:在Thymeleaf中,使用以下表达式:```html<spanth:text="${#numbers.formatDecimal(amount/10000,&#39;#,##0.##&#39;)}"></span>```但是,如果我们的数值是null,则会显示为空。如果我们需要处理null,可以配合使用Thymeleaf的三元运算符。如:```html<spanth:text="${amount!=null}?${#numbers.formatDecimal(amount/10000,&#39;#,##0.##&#39;)}:&#39;&#39;"></span>```或者使用默认值:```html<spanth:text="${#numbers.formatDecimal(amount!=null?amount/10000:0,&#39;#,##0.##&#39;)}"></span>```根据实际需求选择。注意:除法操作可能会产生浮点数精度问题,如果对精度要求很高,建议在后端转换为万元单位后再传递到视图。相关问题:1.Thymeleaf中如何格式化日期?2.在Thymeleaf中如何自定义数字格式化的舍入模式?3.如何处理Thymeleaf中数值为null的情况?</think>在 Thymeleaf 中实现数值以万元为单位(除以 10000)并使用 `##,###.##` 格式显示,可过以下步骤实现: ### 解决方案 1. **创建自定义格式化工具类**(推荐) ```java // 在Spring Boot项目中创建工具类 import org.springframework.format.Formatter; import java.text.DecimalFormat; import java.text.ParseException; import java.util.Locale; public class TenThousandFormatter implements Formatter<Number> { private static final DecimalFormat FORMAT = new DecimalFormat("##,###.##"); // 定义格式 @Override public String print(Number number, Locale locale) { double valueInTenThousand = number.doubleValue() / 10000.0; return FORMAT.format(valueInTenThousand); // 转换为万元并格式化 } @Override public Number parse(String text, Locale locale) throws ParseException { return FORMAT.parse(text).doubleValue() * 10000; // 解析回原值 } } ``` 2. **注册格式化器**(在配置类中) ```java import org.springframework.context.annotation.Configuration; import org.springframework.format.FormatterRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { @Override public void addFormatters(FormatterRegistry registry) { registry.addFormatter(new TenThousandFormatter()); // 注册自定义格式化器 } } ``` 3. **在 Thymeleaf 模板中使用** ```html <!-- 直接格式化模型数据 --> <div th:text="${#numbers.formatDecimal(modelValue, 0, &#39;COMMA&#39;, 2, &#39;POINT&#39;)}"> <!-- 默认显示(单位:元) --> </div> <!-- 使用自定义万元格式化 --> <div th:text="${@tenThousandFormatter.format(modelValue)}"> <!-- 显示为:12,345.68(表示123,456,789元) --> </div> ``` ### 关键说明 1. **格式说明**: - `##,###.##` 分解: - `##,###`:整数部分每3位用逗号分隔(至少显示1位整数) - `.##`:保留最多2位小数(不足不补零) - 示:`123456789` → `12,345.68`(万元单位) 2. **备选方案**(无需自定义类): ```html <!-- 直接在模板中计算并格式化 --> <span th:text="${#numbers.formatDecimal(modelValue / 10000, 0, &#39;COMMA&#39;, 2, &#39;POINT&#39;)}"> <!-- 结果:12,345.68 --> </span> ``` ### 注意事项 1. **精度问题**: - 浮点数运算可能有精度误差,建议用 `BigDecimal` 处理金融数据 - 后端计算示: ```java BigDecimal value = new BigDecimal("123456789"); BigDecimal result = value.divide(new BigDecimal(10000), 2, RoundingMode.HALF_UP); ``` 2. **国际化**: - 逗号分隔符在部分地区显示为空格,需适配本地化: ```html <span th:text="${#numbers.formatDecimal(..., locale)}"> ``` 3. **空值处理**: - 添加空值保护: ```html <span th:text="${modelValue != null} ? ${#numbers.formatDecimal(modelValue/10000, ...)} : &#39;&#39;"> ``` ###效果 | 原始值(元) | 格式化结果(万元) | |-------------|------------------| | 123456789 | 12,345.68 | | 50000 | 5.00 | | 10000000 | 1,000.00 | > 此方案结合了 Spring MVC 的格式化能力[^1]和 Thymeleaf 的数字处理功能,确保显示格式符合财务规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值