stream字符型数据排序错误问题

在编码过程中,遇到对数据库某一字段排序时,使用stream的sort方法一直返回的错误结果,在尝试多次无效,最终发现是mysql处理数据库时,对字符型数值数据排序错误

在使用mysql对字符型定义使用如下语句

SELECT DISTINCT ldh FROM `table_name` ORDER BY ldh ASC;

查询时出现排序错误的情况
在这里插入图片描述
如果需要返回正确的结果,可以通过在排序字段*1或排序字段+0解决;

SELECT DISTINCT ldh FROM `table_name` ORDER BY ldh*1 ASC;

SELECT DISTINCT ldh FROM `table_name` ORDER BY ldh+0 ASC;

在这里插入图片描述

当然,在使用stream排序是也需要做一次强制类型转换,才能得到正确的结果,字符型数值数据排序,真的挺大坑。。

  list = list.stream().sorted(Comparator.comparing((Map<String, Object> h) -> Integer.valueOf((String) h.get("lch"))))
                .collect(Collectors.toList());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,根据您的要求,我进行了修改。以下是更新后的示例代码: ```cpp #include <iostream> #include <stack> #include <string> #include <sstream> #include <iomanip> using namespace std; double evaluatePostfixExpression(string postfixExpression) { stack<double> numbers; stringstream ss(postfixExpression); string token; while (ss >> token) { if (isdigit(token[0])) { numbers.push(stod(token)); // 将字符串转换为双精度浮点数并入栈 } else { double operand2 = numbers.top(); numbers.pop(); double operand1 = numbers.top(); numbers.pop(); switch (token[0]) { case '+': numbers.push(operand1 + operand2); break; case '-': numbers.push(operand1 - operand2); break; case '*': numbers.push(operand1 * operand2); break; case '/': numbers.push(operand1 / operand2); break; } } } return numbers.top(); } int main() { string postfixExpression; cout << "请输入后缀表达式(以@结束): "; getline(cin, postfixExpression); double result = evaluatePostfixExpression(postfixExpression); cout << "表达式的值为: " << fixed << setprecision(2) << result << endl; return 0; } ``` 在这个示例中,我们使用了 `std::stringstream` 类来逐个读取输入的后缀表达式中的每个字符。我们使用 `std::getline` 函数来读取包含空格的整行输入。然后我们逐个处理每个由空格分隔的字符串,判断它是数字还是运算符。 为了保留两位小数,并对第三位四舍五入,我们使用了 `std::fixed` 和 `std::setprecision` 来设置输出流的格式。 请注意,这段代码假设输入的后缀表达式是有效的,并且只包含数字、四则运算符和空格。如果输入的表达式不满足这些条件,需要进行额外的错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值