标准计算功能:提供基本数学运算,支持即时计算和表达式求值
科学计算功能:扩展数学运算,支持运算优先级和复杂函数计算
程序员计算功能:为开发者提供常用数学运算,支持常见进制转换
日期计算:计算两个日期之间的差异,支持年、月、日的加减运算
计算历史和内存:支持计算历史记录和内存存储功能
单位转换:支持多种度量单位之间的转换
货币转换:基于Bing数据提供实时货币汇率转换
高精度计算:采用任意精度算术算法,确保计算精度不丢失
计算器提供多种模式,用户可以通过界面切换不同的计算模式:
|
1 2 3 4 5 6 7 8 |
// 初始化计算器管理器 CalculatorManager manager(displayCallback, resourceProvider);
// 设置标准模式 manager.SetStandardMode();
// 发送计算命令 manager.SendCommand(Command::ADD); |
|
1 2 3 4 5 |
// 创建单位转换器 UnitConverter converter(dataLoader);
// 执行温度单位转换 converter.Convert(100, "Celsius", "Fahrenheit"); |
|
1 2 3 |
// 使用Bing数据进行货币转换 CurrencyConverter currencyConverter(currencyDataLoader); currencyConverter.Convert(100, "USD", "EUR"); |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// CalculatorHistory.cpp - 历史记录管理实现 unsigned int CalculatorHistory::AddToHistory( _In_ shared_ptr<vector<pair<wstring, int>>> const& tokens, _In_ shared_ptr<vector<shared_ptr<IExpressionCommand>>> const& commands, wstring_view result) { shared_ptr<HISTORYITEM> spHistoryItem = make_shared<HISTORYITEM>();
spHistoryItem->historyItemVector.spTokens = tokens; spHistoryItem->historyItemVector.spCommands = commands; spHistoryItem->historyItemVector.expression = GetGeneratedExpression(*tokens); spHistoryItem->historyItemVector.result = wstring(result);
return AddItem(spHistoryItem); } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
// Rational.cpp - 有理数运算实现 Rational Rational::operator-() const { return Rational{ Number{ -1 * m_p.Sign(), m_p.Exp(), m_p.Mantissa() }, m_q }; }
Rational& Rational::operator+=(Rational const& rhs) { PRAT lhsRat = this->ToPRAT(); PRAT rhsRat = rhs.ToPRAT();
try { addrat(&lhsRat, rhsRat, RATIONAL_BASE, RATIONAL_PRECISION); destroyrat(rhsRat); } catch (uint32_t error) { destroyrat(lhsRat); destroyrat(rhsRat); throw(error); }
*this = Rational{ lhsRat }; destroyrat(lhsRat);
return *this; } |
|
1 2 3 4 5 6 7 8 9 10 |
// ExpressionCommand.cpp - 表达式命令处理 CalculationManager::CommandType CUnaryCommand::GetCommandType() const { return CalculationManager::CommandType::UnaryCommand; }
void CUnaryCommand::Accept(_In_ ISerializeCommandVisitor& commandVisitor) { commandVisitor.Visit(*this); } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
// NumberFormattingUtils.cpp - 数字格式化工具 void TrimTrailingZeros(_Inout_ wstring& number) { if (number.find(L'.') == wstring::npos) { return; }
if (auto i = number.find_last_not_of(L'0'); i != wstring::npos) { number.erase(number.cbegin() + i + 1, number.cend()); }
if (number.back() == L'.') { number.pop_back(); } } |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
// CalcEngine.cpp - 计算引擎核心功能 void CCalcEngine::ProcessCommand(OpCode wID) { if (IsGuiSettingOpCode(wID)) { // 处理GUI设置操作码 HandleGuiSettingCommand(wID); } else if (IsDigitOpCode(wID)) { // 处理数字输入 HandleDigitCommand(wID); } else if (IsBinOpCode(wID)) { // 处理二元操作符 HandleBinaryOperatorCommand(wID); } else if (IsUnaryOpCode(wID)) { // 处理一元操作符 HandleUnaryOperatorCommand(wID); } } |