文档章节

C++之floor函数

SVD
 SVD
发布于 2015/10/21 20:51
字数 567
阅读 37
收藏 0

今天在清华大学出版社出版的《c++程序设计基础教程》中,看到一个简单的小程序。它是一个关于银行账户管理的小程序。先不急看代码,首先需要弄清银行是如何结算利息的。如果给定的条件是按照年利率的方式存取款,则首先需要将年利率转成日利率,这样计算出的结果才能与实际大致符合,那么,将利率rate/365也就不奇怪了。程序中还设置了accumulation这个变量专门存储在特定的时间间隔内,涨了多少利息,其中accumulate为常成员函数,这保证了在常成员函数中绝对不会更改数据成员的值。代码如下:

#include "stdafx.h"
#include <iostream>
#include <cmath>
using namespace std;
class SavingsAccount { //存储账户类
private:
	int id;            //账号	
	double balance;    //金额
	double rate;       //存款年利率
	int lastDate;      //上次变更余额的时期
	double accumulation;//余额按日累加之和
	//记录一笔账,date为日期,amount为金额,desc为说明
	void record(int date, double amount);
	double accumulate(int date) const {
		return accumulation + balance * (date - lastDate);

	}
public :
	SavingsAccount(int date, int id, double rate);
	int getId() { return id; }
	double getBalance() { return balance; }
	double getRate() { return rate; }
	void deposit(int date, double amount);
	void withdraw(int date, double amount);
	void settle(int date);
	void show();
};
SavingsAccount::SavingsAccount(int date, int id, double rate) :id(id), balance(0), rate(rate), lastDate(date), accumulation(0) {
	cout << date << "\t#" << id << "is created" << endl;
}
void SavingsAccount::record(int date, double amount) {
	accumulation = accumulate(date);
	lastDate = date;
	amount = floor(amount * 100 + 0.5) / 100;//保留小数点后两位
	balance += amount;
	cout << date << "\t#" << id <<"\t"<< amount<<"\t"<<balance<< endl;
	}
void SavingsAccount::deposit(int date, double amount)
{
	record(date , amount);
}
void SavingsAccount::withdraw(int date, double amount)
{
	if (amount > getBalance())
	{
		cout << "Error:not enough money" << endl;
	
	}
	else {
		record(date, -amount);
	}
}
void SavingsAccount::settle(int date) {
	double interest = accumulate(date)*rate / 365;
	if (interest != 0)
		record(date, interest);
	accumulation = 0;

}
void SavingsAccount::show() {
	cout << "#" << id << "\tBalance: " << balance;
}
int main()
{
	SavingsAccount sa0(1, 21325302, 0.015);
	SavingsAccount sa1(1, 58320212, 0.015);

	sa0.deposit(5, 5000);
	sa1.deposit(25, 10000);
	sa0.deposit(45, 5500);
	sa1.withdraw(60, 4000);
	sa0.settle(90);
	sa1.settle(90);
	sa0.show(); cout << endl;
	sa1.show(); cout << endl;
	return 0;
}

没有用到什么新的C++语法特性。首先给出了SavingsAccount类的定义。其中floor函数,是向下取整函数,声明在头文件cmath中。floor(x+0.5)常常用来进行四舍五入取整。拓展一下,ceil为向上取整函数。

运行结果:

© 著作权归作者所有

共有 人打赏支持
SVD

SVD

粉丝 33
博文 195
码字总数 97009
作品 0
海淀
C++ Primer 之函数模板

函数模板是通用的函数描述,通过将类型作为参数传递给模板,使编译器生成可用具体的类型的函数。类似于: 对于不同类型使用同一种算法,可使用模板,有时需要像重载常规函数那样去重载函数模...

lxfeng
2015/08/02
0
0
C++基础教程之C/C++区别

C/C++基础教程之C/C++区别 这是C++教程得第一步,后续会持续更新哦!欢迎新手(具有C基础),老鸟可绕道,可指导。 C++标准输入和输出 C++标准输入和输出分别是cin和cout,用法非常简单 cin>>n...

这个人很懒什么都没留下
09/01
0
0
《鸡啄米C++编程入门系列》系列技术文章整理收藏

《鸡啄米C++编程入门系列》系列技术文章整理收藏 1鸡啄米:C++编程入门系列之前言 http://www.lai18.com/content/410454.html 2鸡啄米:C++编程入门系列之一(进制数) http://www.lai18.com...

开元中国2015
2015/06/27
0
0
FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器

摘要: 在使用C++做服务器开发中,经常会使用到脚本技术,Lua是最优秀的嵌入式脚本之一。Lua的轻量、小巧、概念之简单,都使他变得越来越受欢迎。本人也使用过python做嵌入式脚本,二者各有特...

知然
2013/01/27
0
0
【转载】数据结构利器之私房STL

数据结构利器之私房STL 此系列的文章适合初学有意剖析STL和欲复习STL的同学们。 学过c++的同学相信都有或多或少接触过STL。STL不仅仅是c++中很好的编程工具(这个词可能有点歧义,用类库更恰...

悠米海
2012/12/02
0
0

没有更多内容

加载失败,请刷新页面

加载更多

零拷贝I:用户模式视角

英文原文地址:http://www.linuxjournal.com/article/6345。内容是关于 Zero Copy(零拷贝) 的详细介绍。在RocketMQ的Consumer 消费消息过程,使用了零拷贝技术。作用是即使被频繁调用,文件传...

Jacktanger
18分钟前
8
0
记在k8s的pod上使用apache的commons-net:ftp功能时,ftp一直上传文件失败

在k8s的pod上使用apache的commons-net:ftp功能时,一直显示: 即上传文件失败,但是在本地环境进行上传时却又显示上传成功,让人十分不解。在网上搜索了一下ftp的一些资料发现ftp共有两种模式...

helplove
19分钟前
1
0
Go map实现原理

map数据结构 Golang的map使用哈希表作为底层实现,一个哈希表里可以有多个哈希表节点,也即bucket,而每个bucket就保存了map中的一个或一组键值对。 map数据结构由runtime/map.go/hmap定义:...

恋恋美食
25分钟前
1
0
debian python library re-install

apt-get install python-aptsudo apt-get install python-pkg-resources python-setuptools --reinstall...

关上越
30分钟前
1
0
Elasticsearch地理位置总结

更多内容请参考 : https://www.felayman.com 翻译版本:https://es.xiaoleilu.com/310_Geopoints/00_Intro.html 官方原文:https://www.elastic.co/guide/en/elasticsearch/guide/current/g......

xiaomin0322
31分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部