【问题标题】:Greater than or equals to always trigger大于等于总是触发
【发布时间】:2018-07-10 23:12:11
【问题描述】:

这里是有问题的代码:

public void setReminder() {
    if (db.getTotalIncome(prefs.getString("username", "")) != 0.0 ||
        db.getTotalExpenses(prefs.getString("username", "")) != 0.0 ||
        db.getReminder(prefs.getString("username", "")) != null) {

        Float income = db.getTotalIncome(prefs.getString("username", ""));
        Float expense = db.getTotalExpenses(prefs.getString("username", ""));
        Cursor reminder = db.getReminder(prefs.getString("username", ""));
        if (reminder.moveToFirst() != false) {
            String reminderValue = reminder.getString(reminder.getColumnIndex("value"));
            if (expense <= Integer.parseInt(reminderValue)/100*income) {
                PugNotification.with(this)
                    .load()
                    .title("Warning")
                    .message("Expenses nearing threshold")
                    .bigTextStyle("You have spent more than " + Integer.parseInt(reminderValue) / 100 + "% " + "of your income!")
                    .smallIcon(R.drawable.icon_flag)
                    .largeIcon(R.drawable.icon_flag)
                    .flags(Notification.DEFAULT_ALL)
                    .simple()
                    .build();
                }
            }
        }
    }

目前,在if (expense &lt;= Integer.parseInt(reminderValue)/100*income),它似乎总是正确的,导致显示通知。我似乎无法弄清楚发生了什么。还有一点,好像是第一个if 声明

if (db.getTotalIncome(prefs.getString("username", "")) != 0.0 ||
    db.getTotalExpenses(prefs.getString("username", "")) != 0.0 ||
    db.getReminder(prefs.getString("username", "")) != null) 

也总是返回 true。我读到 float 的默认值是 0.0,那么我的代码是错误的还是发生了什么?

【问题讨论】:

  • 简单解决方案:- 使用调试器。你会得到what is going on
  • 发现问题:Integer.parseInt(reminderValue)/100一直返回0。将其更改为Float.valueOf(reminderValue) 解决了这个问题。

标签: android


【解决方案1】:

您的代码:

    if (db.getTotalIncome(prefs.getString("username", "")) != 0.0 ||
            db.getTotalExpenses(prefs.getString("username", "")) != 0.0 ||
            db.getReminder(prefs.getString("username", "")) != null)

if 中的表达式始终为真,因为您使用的是||,这意味着or,因此如果任何参数为真,则整个表达式为真。在您的情况下,至少有一个参数是true

【讨论】:

    【解决方案2】:

    尝试使用

    expense.intValue() <= Integer.parseInt(reminderValue)/100*income
    

    你的其他 if 语句也是如此:

    if (db.getTotalIncome(prefs.getString("username", "")).intValue() != 0 ||
                    db.getTotalExpenses(prefs.getString("username", "")).intValue() != 0 ||
                    db.getReminder(prefs.getString("username", "")) != null) 
    

    有关更多信息,请阅读此答案:https://stackoverflow.com/a/29139595/284308

    【讨论】:

    • Nope 不起作用,在调试模式下,此语句始终评估为 false
    猜你喜欢
    • 1970-01-01
    • 2016-10-30
    • 1970-01-01
    • 1970-01-01
    • 2015-12-13
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    • 2021-06-04
    相关资源
    最近更新 更多