- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我实际上正在学习 C++ 编程语言(我以前从未编程过),我正在尝试解决一个问题,我必须设计和实现一个简单的货币类来进行涉及美元的计算。作者给了我一些关于如何实现这个类的规则:
在编码之前进行一些研究后,我发现不建议将 double 类型用于货币金额,我应该使用整数。我的问题是关于如何在不丢失数据的情况下读取 double 作为输入并将其转换为 long int?我应该使用其他方式/类型来做到这一点吗?我应该直接将 long int(代表美分)作为此类的构造函数参数吗?我一直在搜索,但我发现了很多关于可能丢失数据的信息,这让我感到困惑。这是一个初学者练习,所以我不认为计算应该非常精确。谢谢
最佳答案
假设输入的格式正确。
也就是说,您收到的所有货币金额都将采用
的形式99.99
9
符号可以是 0 到 9 之间的任何数字(含 0 和 9)。小数点左侧只有数字,范围小到可以存储在 int
中。
小数点的右边(并且总是有一个小数点)总是一个正数,也适合 int
。
您可以创建一个非常简单的结构来表示货币金额,将美元分成一个 int
,将美分分成另一个:
struct Money
{
int dollars;
int cents;
};
读入金额后,您将首先读入dollars
字段。然后你会读入一个.
。然后您将在 cents
字段中读取:
Money m;
char c;
std::cin >> m.dollars >> c >> m.cents;
了解了这么多之后,您就可以开始让您的 I/O 更加健壮,处理没有小数点的情况,或者有人输入非常大的数字。在这一点上,首先读入 std::string
以获得您的钱的文本表示,然后从那里解析 string
可能是合理的:
Money m{0,0};
std::string text;
std::getline(std::cin, text);
std::cout << "Input was: " << text << std::endl;
// is there a decimal point?
size_t decimal_point_position = text.find_first_of('.');
m.dollars = stoi(text.substr(0, decimal_point_position));
if (decimal_point_position != std::string::npos)
{
decimal_point_position += 1;
m.cents = stoi(text.substr(decimal_point_position, text.size() - decimal_point_position));
}
从那里您可以继续提高输入的稳健性。如果有两位小数呢?如果输入中有字符怎么办?
我建议您编写几个测试来测试尽可能多的输入可能性,假设是有史以来最愚蠢、最不懂计算机的用户。你应该如何处理无效输入?要求更多,抛出异常,使用默认值并打印警告?所有这些都是您将来在处理用户输入时要做出的决定。
编辑:解决你的最后一点
arithmetic operations need to be accurate to the last cent using the 4/5 rounding rule.
这通常不会太难,只是很乏味。你将遇到的最大障碍将是 split 。此时您需要非常小心整数舍入。即:
2/1
将生成 0
,而不是 0.5
。
不应实现乘法和除法运算,因为它们没有意义。在网络上搜索以了解如何使用整数除法准确舍入。
关于c++ - 初学者练习 : Design a Money class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34948408/
我将 Money/Money 与 Symfony 和 doctrine 一起使用,但我不确定应该如何执行映射。目前我使用以下内容,导致此错误消息; 错误: Money\Money could not
我指的是 moneyphp/money我计划在我们处理货币的项目之一中使用它。文档很棒,只是它没有涉及如何在数据库中持久化。它谈到将货币对象编码为 JSON,但存储字符串使得很难像比较金额或货币那样简
所以,我是 C# 和对象编程的新手,我遇到了一个小问题。 在基类中我有这个(它基本上将字符串转换为 double[]: namespace PersonalSpendings { class
我正在使用 RubyMoney/money-rails gem,我对它非常满意。 现在我需要为 money 列添加更多精度,所以我定义了一种新货币 :subunit => "S
为什么是assertNotEquals(new Money(4.0), new Money(4.0));相等吗? 此测试失败。 我真的不明白为什么这个断言不成功。 是因为assertNotEquals
如何使用 php 将这个数字 247936 转换为这个 $2,479.36? 我尝试了几种选择,例如: setlocale(LC_MONETARY, 'en_US'); echo money_form
我有一个具有数据类型 joda.money 属性的类。如何将此属性映射到 mysql 中。 我的类(class)是: @Table(name="products") public class Prod
我有一个具有数据类型 joda.money 属性的类。如何将此属性映射到 mysql。 我的类(class)是: @Table(name="products") public class Produc
我坚持使用加/减方法来定义一个名为 Money 的类,该类的对象代表美元的金额。该类应该有 2 个 int 类型的实例变量,分别表示美元和美分的金额。包括一个具有 2 个 int 类型参数(表示美元和
我有一个问题,已尝试通过 Google 搜索但尚未找到答案。我想做的是使用存储过程在 MySQL 中的两个帐户之间转账。例如,如果我使用调用转移 (20,'Test',3,5)。然后我会从 accou
我想使用应用内结算来实现虚拟货币:例如,用户可以购买 50、100 和 250 个硬币的集合。 我想知道如何管理每个用户拥有的硬币数量。我必须自己管理还是 Android 是否为此提供了一些东西?如果
以下是“pc”表,其中包含有关 pc 的详细信息。 user=> SELECT * FROM pc; code | model | speed | ram | hd | cd | p
我正在通过 codeacademy 学习 Python,并且陷入了这个 lesson : 我的代码是: def hotel_cost(nights): return 140 * nights
我有一个小型财务应用程序,前端是 PHP,后端是 MySQL。我有古老的偏见,我在 MySQL 中将货币值存储为整数美分。我的 HTML 表单允许输入美元值,例如“156.64”,我使用 PHP 将其
我正在尝试获取特定日期欧元和美元之间的汇率。问题是我总是得到日期的交换敢:LocalDate{year=2016, month=1, dayOfMonth=8} 如果我在查询中指定日期并不重要。 这是
如何创建一个仅以货币格式格式化输入的 edittext 条目?当用户输入 5 时,我希望输入看起来像“$0.05”,然后当他们输入 3 时,输入现在应该像“$0.53”,最后他们输入 6,输入应该像“
说明如下: money保存货币值数据类型,范围为-922337203685477.5808到+922337203685477.5808最大长度为8字节。 smallmoney保存货币值数据类型,
我已经将 django-money 模块安装到一个项目中。当尝试在模板中呈现时,将呈现货币文件: $100.00 有什么方法可以只渲染没有符号的十进制值吗?如: 100.00 最佳答案 money
pom.xml 中添加的依赖: javax.money money-api 1.0.3 相关代码: MonetaryAmount mon = Monetary.getDef
我有这个用于接受金钱的文本框的自定义验证: //custom validator for money fields $.validator.addMethod("money", function (v
我是一名优秀的程序员,十分优秀!