MST

星途 面试题库

面试题:C++ 函数返回普通类型在复杂业务场景下的错误处理

假设你正在开发一个金融计算模块,其中有一个函数`calculateInterest`用于计算利息,返回一个`double`类型的利息值。该函数接收本金、利率和时间作为参数。在复杂业务场景下,可能出现本金为负数、利率超出合理范围等错误情况,请实现该函数并给出全面的错误处理方案,确保函数调用者能够准确知晓错误信息。
22.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
public class FinancialCalculator {
    public static final String ERROR_NEGATIVE_PRINCIPAL = "本金不能为负数";
    public static final String ERROR_INVALID_INTEREST_RATE = "利率超出合理范围(应在0到1之间)";

    public static String calculateInterestErrorMessage;

    public static double calculateInterest(double principal, double interestRate, double time) {
        if (principal < 0) {
            calculateInterestErrorMessage = ERROR_NEGATIVE_PRINCIPAL;
            return Double.NaN;
        }
        if (interestRate < 0 || interestRate > 1) {
            calculateInterestErrorMessage = ERROR_INVALID_INTEREST_RATE;
            return Double.NaN;
        }
        calculateInterestErrorMessage = null;
        return principal * interestRate * time;
    }
}

你可以这样调用:

public class Main {
    public static void main(String[] args) {
        double principal = 1000;
        double interestRate = 0.05;
        double time = 1;
        double interest = FinancialCalculator.calculateInterest(principal, interestRate, time);
        if (Double.isNaN(interest)) {
            System.out.println("计算错误: " + FinancialCalculator.calculateInterestErrorMessage);
        } else {
            System.out.println("利息: " + interest);
        }
    }
}

解释

  1. 常量定义:定义了两个错误信息的常量ERROR_NEGATIVE_PRINCIPALERROR_INVALID_INTEREST_RATE,分别用于本金为负数和利率超出范围的错误提示。
  2. 静态变量calculateInterestErrorMessage用于存储错误信息,这样调用者可以获取具体的错误。
  3. calculateInterest方法
    • 首先检查本金是否为负数,如果是,设置错误信息并返回Double.NaN
    • 接着检查利率是否在合理范围(0到1之间),如果不在,设置错误信息并返回Double.NaN
    • 如果没有错误,计算并返回利息值,同时将错误信息设置为null
  4. 调用示例:在main方法中,调用calculateInterest方法,如果返回值是NaN,则打印错误信息,否则打印利息值。

注意事项

  1. 这里的利率范围假设是0到1(即0%到100%),实际业务中范围可能不同,需要根据实际调整。
  2. 如果使用其他编程语言,如Python,可以使用异常机制来处理错误,示例如下:
def calculateInterest(principal, interestRate, time):
    if principal < 0:
        raise ValueError("本金不能为负数")
    if interestRate < 0 or interestRate > 1:
        raise ValueError("利率超出合理范围(应在0到1之间)")
    return principal * interestRate * time


try:
    principal = 1000
    interestRate = 0.05
    time = 1
    interest = calculateInterest(principal, interestRate, time)
    print("利息:", interest)
except ValueError as e:
    print("计算错误:", e)

Python 代码使用try - except块来捕获和处理在calculateInterest函数中可能引发的ValueError异常,并打印相应的错误信息。