【问题标题】:Two ints to one double C++两个整数到一个双 C++
【发布时间】:2011-11-20 23:27:17
【问题描述】:

我在这里遇到了一些问题。 我有两个int 值,一个代表美元,一个代表美分。我的工作是将它们组合成一个double 值,但我遇到了一些麻烦。 这是我想要做的一个例子:

int dollars = 10
int cents = 50
<some code which I haven't figured out yet>
double total = 10.50

我想它相对简单,但我很难弄清楚。 感谢您的帮助!

【问题讨论】:

  • 只是说,玩双打和钱不是一个好主意。

标签: c++ double int


【解决方案1】:

首先考虑如何用铅笔和纸解决这个简单的算术问题(与 C 无关)。一旦你找到了一种手动的方法,我相信编程的方法会显得微不足道。

【讨论】:

  • 好吧,如果两个操作数都是整数,则默认整数除法会导致一些更复杂的问题......“显而易见的”total=dollar+cents/100; 将无法正常工作......
  • 谢谢!我只是忘记将cents 除以 100!纸有时会很有帮助!
  • @sinelaw:当然,只是我认为“算法”很明显,而且他遇到了一些 C++ 特有的困难。事实证明你是对的。
【解决方案2】:

double total = double(dollars) + double(cents) / 100.0;怎么样?

请注意,double 不是表示基于 10 的货币的好数据类型,因为它无法准确表示 1/100。请考虑使用定点解决方案,或者可能是十进制浮点数(这种情况很少见)。

【讨论】:

  • 呃...作业标签,提供现成的解决方案是个好主意吗?
  • @MatteoItalia:哎呀,太晚了......尽管如此,如果 this 对 OP 构成主要障碍,我怀疑知道解决方案会产生很大的不同在大计划中。我选择将此作为关于 C++ 中浮点到整数转换的问题,而不是关于除以 100 的问题...
  • 看来问题实际上是关于除以 100...:S
  • 如果您正在尝试“办公空间”风格的骗局,使用双精度表示分数可能只是一个好主意。
  • @Clinton:拿走了我的订书机吗?!无论如何,您将始终必须以一种或另一种方式处理舍入(考虑计算兴趣),但实际上,这需要明确指定、确定性和可审计性。我自己没有经验,但我认为银行确实为此使用十进制浮点数,尽管我个人可能会选择一些定点整数方案(使用合适的乘法辅助函数)。
【解决方案3】:

这并不难...您必须将 dollars 转换为 double1 并添加 cents 乘以 0.01(或除以 100. - 注意尾随点,表示100.double 常量,所以/ 将执行浮点除法而不是整数除法)。

...但请注意,将货币值存储在二进制浮点变量中根本不是一个好主意,因为二进制没有许多“精确”十进制数的有限表示(例如 0.1) ,它将以近似表示形式存储。当您开始对它们进行一些算术运算时,使用这些值可能会产生“奇怪”的结果。


  1. 实际上,根据您的表达方式,由于隐式转换,可能没有必要。

【讨论】:

    【解决方案4】:

    如果您对编程的“整体想法”感兴趣,而不仅仅是对完成作业感兴趣,我建议您考虑一下:“有什么方法可以将一美元表示为一定数量的美分吗? "为什么要问这个?因为如果要将某些值的两种不同“类型”表示为一个值,则需要以某种方式对它们进行“规范化”或“标准化”,以免任何数据丢失或损坏(或至少对于较小的问题)。

    我也同意 Kerrek SB 的观点,将钱表示为 double 可能不是最好的解决方案。

    【讨论】:

      【解决方案5】:

      这不是很简单吗:总计 = 美元 +(美分/100); ?

      没有理由使这复杂化。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-31
        • 2015-06-29
        • 2012-03-23
        • 1970-01-01
        • 1970-01-01
        • 2010-11-24
        • 2023-02-09
        • 2019-08-13
        相关资源
        最近更新 更多