文档章节

双精度数值转换为字符串

zengxiangwei
 zengxiangwei
发布于 2016/05/07 14:43
字数 430
阅读 9
收藏 0
点赞 2
评论 0
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <string>
#include <memory.h>
#include <iostream>
#include <climits>
#include <fstream>



using namespace std;

std::ofstream out("out.txt");

std::string LongLongToString(long long orgin) {
	char buf[256];
	memset(buf, 0, 256);
	buf[0] = '0';

	long long temp = orgin;
	int count = 0;
	while (temp > 0) {
		long long trail = temp % 10;
		buf[count++] = '0' + trail;
		temp /= 10;
	}
	std::string  ret = buf;
	std::reverse(ret.begin(),ret.end());
	return ret;
}

std::string DoubleToString(double orign)
{
	char str[64];
	int sig = 32; /* significant digits */
	_gcvt(orign, sig, str);
	return str;
}

std::string DoubleToString(double orign, unsigned int pos) {

	//取得数值符号
	std::string ret = "";
	if (orign < 0) ret = "-";
	orign = fabs(orign);

	//数值太大,直接采用系统默认函数进行转换
	//
	if (orign > LLONG_MAX ) {
		ret += DoubleToString(orign);
	}
	else{
		//小数点最多支持到16位
		pos = (pos <= 16) ? pos : 16;
		//取整数部分
		long long temp = orign;
		std::string ret1 = LongLongToString(temp);

		//处理小数部分, 小数部分加一确保能获取前导的0
		double dotValue = orign - double(temp) + 1;

		//得到要保留的小数部分,多取一位,用于判断是否四舍五入
		long long dax = 10;
		for (unsigned int i = 0; i < pos; i++)
			dax *= 10;
		temp = dotValue * dax;

		//判断是否四舍五入
		long long tail = temp % 10;
		temp /= 10;
		temp += (tail >= 5) ? 1 : 0;
		//取得小数部分
		std::string ret2 = LongLongToString(temp);

		ret += ret1 + "." + std::string(ret2.c_str() + 1);

	}
	
	return ret;
}

/*
*
*/

int main(int argc, char** argv) {

	double value = 0.00000000000001;
	cout << value << ":"<< DoubleToString(value,20);
	
	int count = 100000;
	while (count > 0) {
		long temp1 = rand();
		long temp2 = rand() + 1;
		if (temp1 % 2 == 0) temp1 = -temp1;
		double temp = (double)temp1 / (double)temp2 + double(temp1);
		

		std::string ret = DoubleToString(temp, 20);
		std::string pass = "Failed!!!";

		if (fabs(atof(ret.c_str()) - temp) < 10e-10)
			pass = "Pass!!!";
		
		out << "value:" << DoubleToString(temp) << "string:" + ret << +"result:" <<pass <<  std::endl;
		count--;
	}
	return 0;
}


© 著作权归作者所有

共有 人打赏支持
zengxiangwei
粉丝 8
博文 13
码字总数 18059
作品 0
郑州
程序员
R学习笔记系列—R语言基本数据类型

  1.3 R数据类型   R是面向对象的语言,R中的每个变量都被视为对象,有自己的属性,其中类型和长度是所有对象都具备的内在属性。   1.3.1 基本数据类型   R 有四种基本数据类型,即数...

爱编程爱统计 ⋅ 2017/09/06 ⋅ 0

BigDecimal用法详解

一、简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算...

肖歌 ⋅ 2016/02/25 ⋅ 0

【18-03-23】Matlab 基础概念

1° 计算的介绍 数值默认为双精度实数,可用浮点数或科学计数法表示。浮点数表示范围在 10^-308 ~ 10^308 1.1 关系运算 主要对两个运算量大小关系进行比较,输出逻辑值 1 或 0 1.2 逻辑运算 ...

千阳Weston ⋅ 03/23 ⋅ 0

Python黑帽编程2.2 数值类型

Python黑帽编程2.2 数值类型 数值类型,说白了就是处理各种各样的数字,Python中的数值类型包括整型、长整型、布尔、双精度浮点、十进制浮点和复数,这些类型在很多方面与传统的C类型有很大的...

zting科技 ⋅ 2017/01/11 ⋅ 0

Kotlin基本类型

在Kotlin中,数据类型和Java基本相似。Kotlin提供了以下基本的类型 Short类型 var shortVariable: Short = 1println(shortVariable) //1 Short类型变量的范围是-2的15次方到2的15次方-1 var ...

Mcx陌晨旭 ⋅ 2017/07/29 ⋅ 0

计算金额 财务计算 精确运算 BigDecimal用法详解

一、简介 Java在java.math包中提供的API类BigDecimal,用来对超过16位有效 位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。在实际应用中,需要对更大或者更小的数进行运算...

jerry__sun ⋅ 2016/07/07 ⋅ 1

Access中SQL查询的数据类型转换

每个函数都可以强制将一个表达式转换成某种特定数据类型。 语法 CBool(expression) CByte(expression) CCur(expression) CDate(expression) CDbl(expression) CDec(expression) CInt(expres...

伽罗kapple ⋅ 2015/05/20 ⋅ 0

Swift3.0语言教程字符串转换为数字值

Swift3.0语言教程字符串转换为数字值 Swift3.0语言教程字符串转换为数字值,在NSString中,开发者可以将字符串转换为数字值,通过这些数字值可以实现一些功能,如加法运算、减法运算等。数字...

大学霸 ⋅ 2016/11/18 ⋅ 0

Python基础手册9——数字类型

Number(数字) Python的数字由字面值生成或者由算术操作符和内建的算术函数作为结果返回。数字提供了标量贮存和直接访问,它是不可更改类型,也就是说变更数字的值会生成新的对象。Python数...

常大鹏 ⋅ 01/09 ⋅ 0

MySQL 数据类型 详解

数值类型   MySQL 的数值数据类型可以大致划分为两个类别,一个是整数,另一个是浮点数或小数。许多不同的子类型对这些类别中的每一个都是可用的,每个子类型支持不同大小的数据,并且 My...

huntering ⋅ 2014/04/06 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

一篇文章学懂Shell脚本

Shell脚本,就是利用Shell的命令解释的功能,对一个纯文本的文件进行解析,然后执行这些功能,也可以说Shell脚本就是一系列命令的集合。 Shell可以直接使用在win/Unix/Linux上面,并且可以调用...

Jake_xun ⋅ 25分钟前 ⋅ 0

大数据工程师需要精通算法吗,要达到一个什么程度呢?

机器学习是人工智能的一个重要分支,而机器学习下最重要的就是算法,本文讲述归纳了入门级的几个机器学习算法,加大数据学习群:716581014一起加入AI技术大本营。 1、监督学习算法 这个算法由...

董黎明 ⋅ 58分钟前 ⋅ 0

Kylin 对维度表的的要求

1.要具有数据一致性,主键值必须是唯一的;Kylin 会进行检查,如果有两行的主键值相同则会报错。 2.维度表越小越好,因为 Kylin 会将维度表加载到内存中供查询;过大的表不适合作为维度表,默...

无精疯 ⋅ 今天 ⋅ 0

58到家数据库30条军规解读

军规适用场景:并发量大、数据量大的互联网业务 军规:介绍内容 解读:讲解原因,解读比军规更重要 一、基础规范 (1)必须使用InnoDB存储引擎 解读:支持事务、行级锁、并发性能更好、CPU及...

kim_o ⋅ 今天 ⋅ 0

代码注释中顺序更改 文件读写换行

`package ssh; import com.xxx.common.log.LogFactory; import com.xxx.common.log.LoggerUtil; import org.apache.commons.lang3.StringUtils; import java.io.*; public class DirErgodic ......

林伟琨 ⋅ 今天 ⋅ 0

linux实用操作命令

参考 http://blog.csdn.net/qwe6112071/article/details/50806734 ls [选项] [目录名 | 列出相关目录下的所有目录和文件 -a 列出包括.a开头的隐藏文件的所有文件-A 同-a,但不列出"."和"...

简心 ⋅ 今天 ⋅ 0

preg_match处理中文符号 url编码方法

之前想过直接用符号来替换,但失败了,或者用其他方式,但有有些复杂,这个是一个新的思路,亲测可用 <?php$str='637朗逸·超速新风王(300)(白光)'; $str=iconv("UTF-8","GBK",$s...

大灰狼wow ⋅ 今天 ⋅ 0

DevOps 资讯 | PostgreSQL 的时代到来了吗 ?

PostgreSQL是对象-关系型数据库,BSD 许可证。拼读为"post-gress-Q-L"。 作者: Tony Baer 原文: Has the time finally come for PostgreSQL?(有删节) 近30年来 PostgreSQL 无疑是您从未听...

RiboseYim ⋅ 今天 ⋅ 0

github太慢

1:用浏览器访问 IPAddress.com or http://tool.chinaz.com 使用 IP Lookup 工具获得github.com和github.global.ssl.fastly.net域名的ip地址 2:/etc/hosts文件中添加如下格式(IP最好自己查一...

whoisliang ⋅ 今天 ⋅ 0

非阻塞同步之 CAS

为解决线程安全问题,互斥同步相当于以时间换空间。多线程情况下,只有一个线程可以访问同步代码。这种同步也叫阻塞同步(Blocking Synchronization). 这种同步属于一种悲观并发策略。认为只...

长安一梦 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部