我一直在看斯坦福CS193P的讲座,并且一直在研究作业计算器。我很轻松地完成了第一项任务,现在我正尝试为这项任务多加一些功劳。但是,我陷入了额外的信用问题之一:
实现一个用户界面,以选择对sin()或cos()的操作数是否为
被认为是弧度或度数。当您在C库中调用sin(x)时,假定x
的弧度(即0到2π绕圆弧一次),但用户可能希望
输入180并按sin按钮,得到0而不是-0.8012(这是正弦值
180弧度)。您可以为此使用UIButton并关闭titleLabel的
每次按下UIButton时输入文本,但是更好的方法是查看是否可以
通过阅读文档了解如何使用UISwitch(如果您敢!)。
我实现了UISwitch并将其连接为IBOutlet。当我执行“操作”时,我检查开关是打开还是关闭,并将其与要执行的操作一起传递给我的模型。就我的罪过和事例而言,我执行以下操作:
else if ([operation isEqual:@"sin"])
{
if (radians) {
operand = sin(operand);
}
else {
operand = sin(operand) * (180 / M_PI);
}
}
// similar for cos
如果是
radians
(这是一个布尔值:YES =弧度,no =度),那么我通常会执行该操作;如果用户将开关设置为“度”,则我想返回以度为单位的值,作为赋值状态:用户可能要输入180并按sin按钮,并得到0而不是-0.8012(这是180的正弦值)弧度)。但是,此代码无法完全正常工作。当我将开关切换到度数并执行
sin 180
时,它将返回一个或多或少的-45
值。那里出了点问题;我不太确定是什么我已经查找了如何进行转换,我认为我做得对,但显然不对。我意识到这也许更适合math.stackexchange,但是由于有一些代码我想发布,所以把它放在这里。有人可以提供一些有关实现此目标的最佳方法的建议吗?自从我甚至使用cos或sin,弧度和度数以来,已经有一段时间了。
谢谢!
最佳答案
您在哪里定义操作数?
您确定operand
是CGFloat而不是内存地址吗?
您如何格式化输出?如果您使用%e,它将以科学计数法输出...尝试执行%f