Windows计算器是一个现代化的Windows应用程序,使用C++和C#编写,预装在Windows操作系统中。该应用提供标准计算器、科学计算器和程序员计算器功能,还包含各种单位换算和货币转换工具。项目采用任意精度算术运算,确保基本算术运算不会丢失精度。
计算器提供多种模式,用户可以通过界面切换不同的计算模式:
// 初始化计算器管理器
CalculatorManager manager(displayCallback, resourceProvider);
// 设置标准模式
manager.SetStandardMode();
// 发送计算命令
manager.SendCommand(Command::ADD);
// 创建单位转换器
UnitConverter converter(dataLoader);
// 执行温度单位转换
converter.Convert(100, "Celsius", "Fahrenheit");
// 使用Bing数据进行货币转换
CurrencyConverter currencyConverter(currencyDataLoader);
currencyConverter.Convert(100, "USD", "EUR");
// 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);
}
// 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;
}
// ExpressionCommand.cpp - 表达式命令处理
CalculationManager::CommandType CUnaryCommand::GetCommandType() const
{
return CalculationManager::CommandType::UnaryCommand;
}
void CUnaryCommand::Accept(_In_ ISerializeCommandVisitor& commandVisitor)
{
commandVisitor.Visit(*this);
}
// 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();
}
}
// 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);
}
}
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。