两个整型到一个双精度c++

Two ints to one double C++

本文关键字:一个 c++ 双精度 整型 两个      更新时间:2023-10-16

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

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

我想认为它是相对简单的,但是我很难弄清楚。谢谢你的帮助!

首先考虑如何用铅笔和纸(与C无关)将其作为一个简单的算术问题来解决。一旦您找到一种手动解决它的方法,我敢肯定编程的方式将显得微不足道。

double total = double(dollars) + double(cents) / 100.0;呢?

注意,double不是一个很好的数据类型来表示基于10的货币,因为它不能精确地表示1/100。可以考虑使用定点解决方案,或者小数浮点数(这种情况很少见)。

这并不难…您必须将dollars转换为double 1,并将cents乘以0.01(或除以100. -注意后面的点,这表明100.double常量,因此/将执行浮点除法而不是整数除法)。

…但请注意,将货币值存储在二进制浮点变量中根本不是一个好主意,因为二进制没有许多"精确"小数(例如0.1)的有限表示,这些小数将存储在近似表示中。当你开始用这些值做算术时,处理这些值可能会产生"奇怪"的结果。


  1. 实际上,根据你的表达式,由于隐式强制转换,它可能不是必要的。

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

我也同意Kerrek SB的观点,把钱当作double可能不是最好的解决方案。

是不是同样简单:total = dollars + (cents/100);

?