Avoid hitting SOQL Limits but know that I was about to hit them

The way I see it, you have two options here:

  1. Display your message whenever you end up with 0 remaining query rows available.
  2. Write a batch that will store the number of records that object contains in a Hierarchy Custom Setting.

Either way, it will probably simplify repeated references to add a helper method:

public static Integer getRemainingQueryRows()
{
    return Limits.getLimitQueryRows() - Limits.getQueryRows();
}

For Option 1 your solution would simply look like:

someList = [
    SELECT convertCurrency(Price__c) FROM MyObject__c LIMIT :getRemainingQueryRows()
];
isQueryLimitConsumed = (0 == getRemainingQueryRows());

For Option 2 your current implementation would change to look more like:

isQueryComplete = MySetting__c.MyObjectCount__c > getRemainingQueryRows();
someList = [/*query*/];

Because of limitation that apex's Limits class can't provide that information, you may need to add your custom logic to know how many records remain after SOQL rows limit is hit. @Adrian idea about custom setting sounds great, I'd implement it using triggers:

trigger ObjectCount on Object__c(after insert, after delete) {
    if (Trigger.isInsert) {
        setting.MyObjectCount__c += Trigger.New.size();
    } else {
        setting.MyObjectCount__c -= Trigger.Old.size();
    }
    update setting;
}

Query:

List<Object__c> objs = [SELECT convertCurrency(Price__c) 
                        FROM Object__c 
                        LIMIT :(Limits.getLimitQueryRows() - Limits.getQueryRows())];
Integer remaining = setting.MyObjectCount__c - objs.size();
if (remaining > 0) {
    // show error
}