文档章节

C++之floor函数

SVD
 SVD
发布于 2015/10/21 20:51
字数 567
阅读 41
收藏 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
Cocos2dx游戏开发系列笔记10:解刨《战神传说》

有点困了,从桌子换到床上,刚要开敲,豆瓣电台传来的传来奇怪的歌声“马的~马的~” 看看歌词,应该是“慢慢等”,好吧,继续 首先看下vs中的文件 整个项目就这些代码,这样来看逻辑结构比...

懒骨头
2013/12/09
0
0
《鸡啄米C++编程入门系列》系列技术文章整理收藏

《鸡啄米C++编程入门系列》已整理成PDF文档,点击可直接下载至本地查阅 https://www.webfalse.com/read/201812.html 文章 鸡啄米:C++编程入门系列之前言 鸡啄米:C++编程入门系列之一(进制...

开元中国2015
2015/06/27
0
0
C++基础教程之C/C++区别

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

这个人很懒什么都没留下
09/01
0
0
FFLIB之FFLUA——C++嵌入Lua&扩展Lua利器

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

知然
2013/01/27
0
0

没有更多内容

加载失败,请刷新页面

加载更多

大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
14分钟前
0
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
1
0
利用ibeetl 实现selectpicker 的三级联动

1. js 直接写在html页面上面,ibeetl 就可以动态地利用后台传上来的model List ,不需要每次点击都要ajax请求后台 2. 使用selectpicker 的时候,除了对selecct option的动态处理后,还需要 $("#...

donald121
昨天
1
0
Android SELinux avc dennied权限问题解决方法

1. 概述 SELinux是Google从android 5.0开始,强制引入的一套非常严格的权限管理机制,主要用于增强系统的安全性。 然而,在开发中,我们经常会遇到由于SELinux造成的各种权限不足,即使拥有“...

TreasureWe
昨天
3
0
阿里云ACP认证详细笔记(一)

ECS--------------------------1.云服务器Elastic Compute Service(ECS)2.Terraform:您可以使用开源工具Terraform来预配和管理ECS资源。Terraform提供一种简单机制,能够将配置文件部署...

啃不动地大坚果
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部