zoukankan      html  css  js  c++  java
  • double型转换成string型

    double型转换成string型

    题目描写叙述:
    如有一个函数。其可接受一个long double參数,并将參数转换为字符串。结果字符串应保留两位小数,比如,浮点值123.45678应该生成“123.45”这种字符串。表面上看来 这是一个意义不大的编程问题,然而。假设真要在实际中派上用场。函数应设计为具有一定弹性,以同意调用者指定小数位数。另外,函数也应该可以处理各种异常 情况,如像123.0或123这种整数。
    转换函数接口:string do_fraction(long double value, int decplaces = 3)
    题目分析:
    经验之谈:①不管何时须要格式化一个数值。都应该先转换为一个字符串,这样可保证每位数刚好占领一个字符。②须要转化为字符串时候,能够考虑使用库函数
    使用库函数将long double值转化为一个string应该非常easy,可是须要注意以下几个问题:
    1)精度问题
    由于stringstream对象默认精度为6。(这里须要强调一个精度,老式指的是小数位数,新式应该指的是所有位数),这就会有出现一个问题:假设很大的数,比如123456789.9,它就会转化为科学计数法,这显然不是我们须要的,所以我们使用库函数和转换之前,必须先把默认的精度设为最大
    2)小数点位置问题
    定位小数位使用string::find
    在STL算法中使用一个常量来代表“数值未找到”,字符串中是string::npos
    由于我们设定了小数点最大位数decplacea。所以我们要检查小数点位数。假设小于它。那么直接返回字符串。否则小数部分多余的要被截去。

    截断字符串的方法:通常使用
    插入变量之后,怎样截去后面的字符。一般採用自交换
    <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    參考代码:

    string do_fraction(long double value, int decplaces = 3)
    {
        ostringstream out;
        int prec = numeric_limits::digits10; //18 注意须要加上头文件#include<limits>
        out.precision(prec); //覆盖默认精度
    
        //从流中取出字符串
        string str = out.str();
    
        //推断是否有小数点。且还有decpalces位
        size_t n = str.find(DECIMAL_POINT);
        if((n != string::npos) && (str.size() > n + decplaces)) 
        {
            str[n + decplaces] = ''; //覆盖第一个多余的数字
        }
        str.swap(string(str.c_str())); //删除NULL之后多余的字符
        return str;
    }
    

  • 相关阅读:
    HDU 3879 Base Station 最大权闭合图
    自己定义头像处理,轻巧有用,非常多强大的小技巧在里面哦,快来赞美我一下吧^_^
    【Spring实战】—— 8 自动装配
    【Spring实战】—— 7 复杂集合类型的注入
    【Spring实战】—— 6 内部Bean
    【Spring实战】—— 5 设值注入
    【Spring实战】—— 4 Spring中bean的init和destroy方法讲解
    【Spring实战】—— 3 使用facotry-method创建单例Bean总结
    【Spring实战】—— 2 构造注入
    【Spring实战】—— 1 入门讲解
  • 原文地址:https://www.cnblogs.com/yutingliuyl/p/7131588.html
Copyright © 2011-2022 走看看