C++中将两个整数转换为一个双精度浮点数

4

我这里遇到了一点问题。我有两个int类型的值,一个是美元,另一个是美分。我的任务是将它们组合成一个double类型的值,但我遇到了一些麻烦。 下面是我想要实现的示例:

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

我认为这是相对简单的,但我很难理解它。 谢谢你的帮助!


9
仅仅说,玩双倍和金钱是不明智的。 - FailedDev
5个回答

7

首先,想象一下如果你用铅笔和纸解决这个简单算术问题的方式(与C语言无关)。一旦你找到了手动解决它的方法,编程实现将会变得非常简单。


好的,由于默认整数除法的存在,如果两个操作数都是整数,这会导致更多的复杂性...所以"显而易见"的 total=dollar+cents/100; 不会正确地工作... - Matteo Italia
1
谢谢!我刚刚忘记将“cents”除以100!有时候纸张还是很有帮助的!! - b3orion
@sinelaw:当然,我只是认为“算法”很明显,而他可能遇到了一些特定于C++的困难。结果证明你是对的。 - Matteo Italia

0

难道不是很简单吗:total = dollars + (cents/100)?

没有必要把这个问题复杂化。


0

这并不难...你需要将 dollars 转换为 double1,然后加上 cents 乘以 0.01(或除以 100. - 注意末尾的点号,这是为了表示 100. 是一个 double 常量,所以 / 将执行浮点除法而不是整数除法)。

...但要注意,在二进制浮点变量中存储货币值根本不是一个好主意,因为二进制没有许多“精确”的十进制金额的有限表示(例如0.1),这些金额将被存储在近似表示中。使用这样的值进行计算可能会产生“奇怪”的结果。


实际上,根据您的表达方式,由于隐式转换,可能并不需要。

0

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

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


3
作业标签,提供现成的解答是个好主意吗? - Matteo Italia
@MatteoItalia:糟糕,太晚了……尽管如此,如果这个对OP构成了重大障碍,我怀疑知道解决方案是否会在大计划中产生很大的区别。我选择将其视为关于C++中浮点到整数转换的问题,而不是关于除以100的问题…… - Kerrek SB
看起来这个问题实际上是关于除以100的... :S - Matteo Italia
如果你想尝试“办公空间”风格的骗局,使用double来表示分数美分可能是个好主意。 - Clinton
@Clinton: 你拿了我的订书机吗?无论如何,你总是需要处理四舍五入(例如计算利息),但确实需要进行良好的规范、确定性和可审计性。我个人没有经验,但我认为银行确实使用十进制浮点数来达到这个目的,尽管我可能会选择一些固定点整数方案(配合适当的乘法辅助函数)。 - Kerrek SB

0
如果你对编程的整个概念感兴趣,而不仅仅是为了完成作业,我建议你思考一下这个问题:“有没有办法将一个整数美元表示为一定数量的美分?”为什么要问这个问题呢?因为如果你想将两种不同类型的值表示为一个值,你需要以某种方式“标准化”它们,以便没有任何数据丢失或损坏(或者至少对于较小的问题如此)。
此外,我同意Kerrek SB的观点,用double来表示货币可能不是最好的解决方案。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接