C++ double转string

#include "iomanip"
#include <iostream>using namespace std;bool to_int(double value,int& res){res=int(value);//如果结果是min_int/max_int 大概率就是value超过限度了,除非value刚好等于2147483647/-2147483648return (res > -2147483648 && res < 2147483647);
}string double_to_string(double value,int decimal,bool append_zero) {//append_zero:位数不足的补0// decimal 小数点后几位
//    return to_string(value);//只能到第六位//先确定整数的部分bool neg = value<0;if(value<0)value *=-1;string full_str;int full_value;if(to_int(value,full_value)){full_str= to_string(full_value);}else{return "error,value is too big";//error,value is too big}double fraction = value - full_value;int dec_avail = 16-(int)full_str.size();//16,double的剩余精度16-int的部分(至少是1)后面四舍五入 ,超过的部分数字不能保证正确int decimal_rest = max(0,min(dec_avail,decimal));// 剩余可用的string fraction_str;stringstream ss;ss << std::setprecision(decimal_rest) << fraction;fraction_str = ss.str();if(append_zero){decimal -= (int)fraction_str.size() - 2;//需要添加的0的数量, 去除 0 和 .while(true){if(decimal>0){fraction_str += "0";decimal--;}elsebreak;}}if(neg)return "-"+full_str+fraction_str.substr(1,fraction_str.size());elsereturn full_str+fraction_str.substr(1,fraction_str.size());
}int main(){double time1 =  1234567890.123456789123456789;// 1234567890.123457, 后面的四舍五入double time2 = -1234567890.123456789123456789;//-1234567890.123457, 后面的四舍五入double time3 = 0.123456789012345678;//  0.123456789012346, 后面的四舍五入double time4 = -0.123456789012345678;//-0.123456789012346, 后面的四舍五入double time5 = 12345678901234567895;// 数字太大double time6 = 1234567890.123456789;//1234567890.123457, 后面的四舍五入double time7 = -1434567892.123456789;//-1434567892.123457, 后面的四舍五入cout<<"time1: 20         append zero: " <<std::setprecision(30)  <<double_to_string(time1,20,true)<<endl;cout<<"time1: 20 without append zero: " <<std::setprecision(30)  <<double_to_string(time1,20,false)<<endl;cout<<"time1: 5 without append zero: " <<std::setprecision(30)  <<double_to_string(time1,5,false)<<endl;cout<<"time1: 20         append zero: " <<std::setprecision(30)  <<double_to_string(time2,20,true)<<endl;cout<<"time2: 20 without append zero: " <<std::setprecision(30)  <<double_to_string(time2,20,false)<<endl;cout<<"time3: 20         append zero: " <<std::setprecision(30)  <<double_to_string(time3,20,true)<<endl;cout<<"time3: 20 without append zero: " <<std::setprecision(30)  <<double_to_string(time3,20,false)<<endl;cout<<"time4: 20         append zero: " <<std::setprecision(30)  <<double_to_string(time4,20,true)<<endl;cout<<"time4: 20 without append zero: " <<std::setprecision(30)  <<double_to_string(time4,20,false)<<endl;cout<<"time5: 20         append zero: " <<std::setprecision(30)  <<double_to_string(time5,20,true)<<endl;cout<<"time6: 20         append zero: " <<std::setprecision(30)  <<double_to_string(time6,20,true)<<endl;cout<<"time6: 20 without append zero: " <<std::setprecision(30)  <<double_to_string(time6,20,false)<<endl;cout<<"time7: 20         append zero: " <<std::setprecision(30)  <<double_to_string(time7,20,true)<<endl;cout<<"time7: 20 without append zero: " <<std::setprecision(30)  <<double_to_string(time7,20,false)<<endl;return 0;
}

time1: 20         append zero: 1234567890.12345700000000000000
time1: 20 without append zero: 1234567890.123457
time1: 5 without append zero: 1234567890.12346
time1: 20         append zero: -1234567890.12345700000000000000
time2: 20 without append zero: -1234567890.123457
time3: 20         append zero: 0.12345678901234600000
time3: 20 without append zero: 0.123456789012346
time4: 20         append zero: -0.12345678901234600000
time4: 20 without append zero: -0.123456789012346
time5: 20         append zero: error,value is too big
time6: 20         append zero: 1234567890.12345700000000000000
time6: 20 without append zero: 1234567890.123457
time7: 20         append zero: -1434567892.12345700000000000000
time7: 20 without append zero: -1434567892.123457

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/141508.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS特效007:绘制3D文字,类似PS效果

总第 007 篇文章&#xff0c; 查看专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花…

2023年数维杯国际大学生数学建模挑战赛A题

当大家面临着复杂的数学建模问题时&#xff0c;你是否曾经感到茫然无措&#xff1f;作为2022年美国大学生数学建模比赛的O奖得主&#xff0c;我为大家提供了一套优秀的解题思路&#xff0c;让你轻松应对各种难题。 cs数模团队在数维杯前为大家提供了许多资料的内容呀&#xff0…

前端 BUG 总结

文章目录 CSS 样式1、Chrome 89 版本期不再支持 /deep/&#xff0c;请勿使用嵌套 /deep/2、圆角按钮 button 点击后出现矩形框线3、怪异模式4、border 1 像素在手机上显示问题5、文本溢出问题 JavaScript 脚本1、移动端点击穿透2、使用parseInt时必须补全第二个参数 radix3、有…

贪吃蛇和俄罗斯方块

贪吃蛇 一、创建新项目 创建一个新的项目&#xff0c;并命名。 创建一个名为images的文件夹用来存放游戏相关图片。 然后再在项目的src文件下创建一个com.xxx.view的包用来存放所有的图形界面类&#xff0c; 创建一个com.xxx.controller的包用来存放启动的入口类(控制类) …

重复性工作自动化解决方案——影刀

以前&#xff0c;影刀是一个邂逅的初见小工具&#xff0c;新奇在里头&#xff0c;踌躇在外头&#xff1b; 现在&#xff0c;影刀是一个稳定的职场贾维斯&#xff0c;高效在里头&#xff0c;悠闲在外头&#xff1b; 以后&#xff0c;影刀是一个潜力的知己老司机&#xff0c;有序…

2019年五一杯数学建模A题让标枪飞解题全过程文档及程序

2020年五一杯数学建模 A题 让标枪飞 原题再现 标枪的投掷是一项历史悠久的田径比赛项目。标枪投掷距离的远近受到运动员水平&#xff08;出手速度、出手角、初始攻角、出手高度、出手时标枪的初始俯仰角速度等&#xff09;&#xff0c;标枪的技术参数&#xff08;标枪的长度、…

网络运维Day14

监控概述 监控的目的 报告系统运行状况每一部分必须同时监控内容包括吞吐量、反应时间、使用率等提前发现问题进行服务器性能调整前&#xff0c;知道调整什么找出系统的瓶颈在什么地方 监控的资源类别 公开数据 Web、FTP、SSH、数据库等应用服务TCP或UDP端口 私有数据 CPU、内…

互联网Java工程师面试题·微服务篇·第三弹

目录 34、什么是端到端微服务测试&#xff1f; 35、Container 在微服务中的用途是什么&#xff1f; 36、什么是微服务架构中的 DRY&#xff1f; 37、什么是消费者驱动的合同&#xff08;CDC&#xff09;&#xff1f; 38、Web&#xff0c;RESTful API 在微服务中的作用是什…

Mysql-库的操作

1.创建数据库 CREATE DATABASE [IF NOT EXISTS] name name后可以加 CHARACTER SET 或者是 charsetname COLLATE collation_name &#xff08;mysql数据库不区分大小写&#xff09; 说明&#xff1a; name表示想创建的库的名字大写的表示关键字 [] 是可选项 CHARACTER SET…

python3+requests+unittest实战系列【二】

前言&#xff1a;上篇文章python3requestsunittest&#xff1a;接口自动化测试&#xff08;一&#xff09;已经介绍了基于unittest框架的实现接口自动化&#xff0c;但是也存在一些问题&#xff0c;比如最明显的测试数据和业务没有区分开&#xff0c;接口用例不便于管理等&…

CSS特效009:音频波纹加载律动

总第 009 篇文章&#xff0c; 查看专栏目录 本专栏记录的是经常使用的CSS示例与技巧&#xff0c;主要包含CSS布局&#xff0c;CSS特效&#xff0c;CSS花边信息三部分内容。其中CSS布局主要是列出一些常用的CSS布局信息点&#xff0c;CSS特效主要是一些动画示例&#xff0c;CSS花…

警告:新版Outlook会向微软发送密码、邮件和其他数据

新的免费Outlook会将敏感数据发送给 Microsoft。 在没有通知或询问的情况下&#xff0c;Microsoft 授予自己对新 Outlook 用户的 IMAP 和 SMTP 访问数据的完全访问权限。也就是说&#xff0c;当用户设置 IMAP 帐户时&#xff0c;新的 Outlook 会将访问数据和服务器信息发送给 …

H5判断当前环境是否为微信小程序

H5判断当前环境是否为微信小程序 场景代码 场景 H5需要判断当前环境是否为微信小程序&#xff0c;然后做一些交互调整。 代码 isWxMiniCodeWebviewEnv() {return navigator.userAgent.match(/miniprogram/i) || window.__wxjs_environment miniprogram }

Python高级语法----Python C扩展与性能优化

文章目录 1. 编写Python C扩展模块示例代码编译和运行运行结果2. 利用Cython优化性能示例代码编译和运行运行结果3. Python性能分析工具示例代码分析结果1. 编写Python C扩展模块 Python C扩展模块允许你将C语言代码集成到Python程序中,以提高性能。这对于计算密集型任务特别…

物联网AI MicroPython学习之语法 bluetooth蓝牙

学物联网&#xff0c;来万物简单IoT物联网&#xff01;&#xff01; bluetooth 介绍 该模块为板上的蓝牙控制器提供了相关接口。目前支持低功耗蓝牙 (BLE)的Central&#xff08;中央&#xff09;, Peripheral&#xff08;外设&#xff09;, Broadcaster&#xff08;广播者&…

计算机视觉(CV)技术的优势和挑战

计算机视觉技术在很多领域具有很大的优势,例如: 自动化:计算机视觉技术可以帮助实现自动化生产和检测,省去了人力成本和时间成本。 准确性:计算机视觉技术可以提高生产和检测的准确性,降低了人工操作产生的误差。 速度:计算机视觉技术可以实现高速速度的生产和检测,提高…

C++ explicit

explicit 修饰: 只有一个参数的类构造函数&#xff0c;修饰两个参数类构造函数无效 注意&#xff1a;当除了第一个参数以外的其他参数都有默认值的时候, explicit关键字依然有效, 此时, 当调用构造函数时只传入一个参数, 等效于只有一个参数的类构造函数 作用: 是表明该构造…

Paas-云原生-容器-编排-持续部署

了解云原生 云原生架构让企业的基础设施,从简单的资源池化,转向以应用为中心,为应用赋能的敏捷、自运维、安全的云原生基础设施。以应用为中心的云原生基础设置,可以支持多种类型的应用,如微服务应用,中间件应用和AI 应用;可以提升应用交付效率,简化应用管理的复杂度;…

设计模式-状态模式(State)

设计模式-状态模式&#xff08;State&#xff09; 一、状态模式概述1.1 什么是状态模式1.2 简单实现状态模式1.3 使用状态模式的注意事项 二、状态模式的用途三、状态模式实现方式3.1 使用枚举类型实现状态模式3.2 使用内部类实现状态模式3.3 使用接口实现状态模式3.4 使用抽象…

深度学习 机器视觉 人脸识别系统 - opencv python 计算机竞赛

文章目录 0 前言1 机器学习-人脸识别过程人脸检测人脸对其人脸特征向量化人脸识别 2 深度学习-人脸识别过程人脸检测人脸识别Metric Larning 3 最后 0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 深度学习 机器视觉 人脸识别系统 该项目…