• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >编程问答 > 求一个高效的double转char的算法,C或C++

求一个高效的double转char的算法,C或C++

作者:佚名 字体:[增加 减小] 来源:互联网 时间:2017-06-07

佚名通过本文主要向大家介绍了double转char,c double转char,matlab char转double,double to char,java double转char等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
问题:求一个高效的double转char的算法,C或C++
描述:

形如
double 33.333 => char* "33.333"
double 1e+5 => char* "100000"

要求:

  1. 考虑浮点数范围(不能直接强转为int或long)

  2. 考虑浮点数的精度(处理边界问题)

  3. 尽量不使用其它库函数


解决方案1:

如果你想连sprintf对%的处理都省掉的话,建议使用_gcvt_s函数。

使用方法如下:

    char buffer[320];
    _gcvt_s(buffer, 320, number, 30);
    vint len = (vint)strlen(buffer);
    if (buffer[len - 1] == '.')
    {
        buffer[len - 1] = '\0';
    }

如果你使用的编译期没有_gcvt_s的话,可以自己封装一个:

void _gcvt_s(char* buffer, size_t size, double value, vint numberOfDigits)
{
    sprintf(buffer, "%f", value);
    char* point = strchr(buffer, '.');
    if(!point) return;
    char* zero = buffer + strlen(buffer);
    while(zero[-1] == '0')
    {
        *--zero = '\0';
    }
    if(zero[-1] == '.') *--zero = '\0';
}

这样程序在别的编译期下既,而且在VC++下面又可以发挥优异的性能。

解决方案2:

sprintf难道不够高效?
不用库函数把sprintf关于%f的拿出来就好了。


分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 求一个高效的double转char的算法,C或C++

相关文章

  • 2017-06-07 persistentNotifyUrl这个参数如何带上本地服务器的某个标识
  • 2017-06-07 网站使用七牛图片服务,速度非常慢。
  • 2017-06-07 laravel路由,能否实现pathinfo模式
  • 2017-06-07 怎样基于Redis实现模糊查询
  • 2017-06-07 iOS打包覆盖不了旧版本
  • 2017-06-07 视频的横竖问题
  • 2017-06-07 preg_replace_callback替换数组问题?
  • 2017-06-07 七牛云注册,手机验证码不通过,提示[7203]手机验证码已过期
  • 2017-06-07 AndroidStudio如何设置设计界面中默认的API?
  • 2017-06-07 线程1锁定并判断A的状态后需要获得B的锁,线程2锁定并判断B的状态后需要获得A的锁,两线程同时发生,如何避免死锁?

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 楚天都市报多媒体报pythonselenium报PATH异常
    • python爬虫Python:动态(加载)调用其他模块的函数
    • 请教Perl调用exe程序的问题
    • JBoss内无法使用EL表达式Tomcat内正常
    • sed匹配JSON数据中的数字
    • redis如何存储?
    • 这段正则应该怎么分析啊?
    • 求大侠帮忙,jbpm查找所有可选路径的奇怪问题
    • aspnetmvc多类型用户程序开发
    • C/C++如何将string内容分离?

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有