精华内容
下载资源
问答
  • 最近翻看java源码,其中Double类的toString方法很是费解,也就是double转换成字符串的算法,源码根本看不懂,求大神给我补脑!
  • memcpy方法可以实现将int等保存到字符类型的数组中。示例:long long_data=-9828;unsigned char data[4];memcpy(data,&t,4); //将long类型的数据用4个char保存。long my_long_data=0;memcpy(&tt,data,4);//...

    memcpy方法可以实现将int等保存到字符类型的数组中。

    示例:

    long    long_data=-9828;

    unsigned char data[4];

    memcpy(data,&t,4); //将long类型的数据用4个char保存。

    long my_long_data=0;

    memcpy(&tt,data,4);//从4个char中还原出long类型数据。

    一、int/long/float/double转字符串

    方法1:itoa, ltoa(a表示array数组的意思)

    头文件:stdlib.h

    示例:

    int a = 3;

    long b = 23;

    char buf1[30] = "";

    itoa(a, buf1, 10);//10表示十进制,buf1保存的内容为"3"

    char buf2[30] = "";

    ltoa(b, buf2, 10);//10表示十进制,buf2保存的内容为"32"

    方法2:sprintf

    头文件:stdio.h

    示例:

    int a = 3;

    float b = 4.2f;

    char buf[30] = "";

    sprintf(buf, "%d,%f", a, b);//buf保存的内容为"3,4.2",可对比printf

    方法3:ostringstream

    头文件:#include

    using namespace std;

    示例:

    int a = 3;

    float b = 4.2f;

    ostringstream s1;

    s1<

    string s2 = s1.str();//s2保存的内容为"3,4.2"

    二、字符串转int/long/float/double

    方法1:atoi,atol,atof

    头文件:stdlib.h

    示例:

    int a = atoi("32");

    long b = atol("333");

    double c = atof("23.4");

    方法2:strtol, strtod

    头文件:stdlib.h

    示例:

    long b = strtol("333", NULL, 10);//10表示十进制

    double c = strtod("32.3", NULL);

    方法3:sscanf

    头文件:stdio.h

    示例:

    int a;

    float b;

    sscanf("23 23.4", "%d %f", &a, &b);//对比scanf

    方法4:istringstream

    头文件:#include

    using namespace std;

    示例:

    int a;

    float b;

    istringstream s1("23 23.4");

    s1>>a>>b;//对比cin

    展开全文
  • 在C++中,如何将EDCOX1的0度转换为EDCOX1×1?只是有点吹毛求疵…我不会称之为"演员阵容"。@你能告诉我为什么吗?我是一个自我中心的人,C++仍然让我感到不舒服。:)同意,这是一个转换,而不是演员表。啊…明白了。...

    在C++中,如何将EDCOX1的0度转换为EDCOX1×1?

    只是有点吹毛求疵…我不会称之为"演员阵容"。

    @你能告诉我为什么吗?我是一个自我中心的人,C++仍然让我感到不舒服。:)

    同意,这是一个转换,而不是演员表。

    啊…明白了。我的错误。

    我发现"铸造"这个词通常是超载的。人们在想说"转换"的地方使用它。像"隐式强制转换"这样的东西并不存在:强制转换总是显式的。对我来说,这是一种程序员的无知。

    在标准lib cs.usyd.edu.au/~kev/pp/resources/cplusplus/ref/cstdlib/&hellip中使用ltoa;

    不知怎么的,LTOA不适合我。当试图在C++中完成某件事情时,感觉很愚蠢。对我来说,它甚至比JavaScript更糟糕。:)

    @还有一件事——英语不是我的母语。我经常混淆相似词的确切意思。

    顺便说一句,我现在很喜欢javascript。很奇怪事情是怎么变的:)

    STD:在C++ 11中,实际上存在STD::toString和STD::TooWWString函数。

    string to_string(int val);

    string to_string(long val);

    string to_string(long long val);

    string to_string(unsigned val);

    string to_string(unsigned long val);

    string to_string(unsigned long long val);

    string to_string(float val);

    string to_string(double val);

    string to_string (long double val);

    您可以使用Stringstream。

    #include

    // ...

    std::string number;

    std::stringstream strstream;

    strstream << 1L;

    strstream >> number;

    在标准库中,编译器通常也有一些专用的C函数。不过,我更喜欢更"便携"的变体。

    C的方法是使用sprintf,但这并不十分安全。在一些库中有新的版本,比如sprintf_,它可以防止缓冲区溢出。

    如果你喜欢复制粘贴,这里是:

    #include

    template

    inline std::string to_string (const T& t)

    {

    std::stringstream ss;

    ss << t;

    return ss.str();

    }

    你错过了template。

    谢谢,我已经更新了答案。

    inline现在是多余的。

    好吧,可以讨论一下,这取决于编译器的实现,模板只有在编译器认为合适的时候才进行内联扩展。

    内联函数也是如此。令人惊讶的是,inline关键字与代码内联几乎没有关系(至少从1998年开始),它只是标记一个函数,这样链接器就不会抱怨多个定义了。

    boost::lexical_cast(my_long)更多信息请访问http://www.boost.org/doc/libs/1_39_0/libs/conversion/lexical_cast.htm

    +1,尽管最初,Lexical_cast只不过是接受的Stringstream示例(只是更具表现力地进行了包装)。

    int main()

    {

    long mylong = 123456789;

    string mystring;

    stringstream mystream;

    mystream << mylong;

    mystring = mystream.str();

    cout << mystring <

    ";

    return 0;

    }

    我不知道这是什么类型的作业,但最可能的情况是,老师不想要一个你称之为"神奇的"现有功能的答案(尽管这是推荐的方法),但他想看看你是否可以自己实现。

    以前,我的老师常说"我想看看你是否能自己编程,而不是你是否能在系统中找到它。"嗯,他错得有多严重;)。

    不管怎样,如果你的老师是一样的,这是很难做到的。

    std::string LongToString(long value)

    {

    std::string output;

    std::string sign;

    if(value < 0)

    {

    sign +"-";

    value = -value;

    }

    while(output.empty() || (value > 0))

    {

    output.push_front(value % 10 + '0')

    value /= 10;

    }

    return sign + output;

    }

    你可以说使用std::string不是"困难的方式",但我猜在实际的集会中什么是重要的。

    这次可以使用就绪函数。但谢谢你这个好主意。

    真的?他只是在检查你是否能在某个地方找到一个函数?是的,时代变了;)…

    @更棒的是-他注意到我知道OOP,感觉很好,没有检查任何其他东西。:)

    查找要使用的函数几乎不知道OOP。

    @这里有一些半随机链接,以防你想更清楚地了解我所知道的-pastebin.com/k4yaquxy

    它不会比其他使用std::stringstream的解决方案更快吗?

    有几种方法。阅读庄园的字符串格式化程序进行深入比较。

    这篇文章不错。

    对。这至少是我第三次把它联系起来。8V)

    在C++ 11中可以使用STD:toSype字符串

    long val = 12345;

    std::string my_val = std::to_string(val);

    #include

    ....

    std::stringstream ss;

    ss << a_long_int;  // or any other type

    std::string result=ss.str();   // use .str() to get a string back

    它是STD::字符串,而不是STD::字符串。

    谢谢你-手指有问题。

    到目前为止,任何人都没有涉及到的一个问题是,为了帮助您进一步思考这个问题,当它被强制转换为字符串时,需要多长时间的格式。

    只需看看spreedsheet程序(如calc/excel)。你想让它四舍五入到最接近的百万,如果它是负数,用括号括起来,总是显示符号……这个数字真的是其他东西的表示吗?你应该用oractal还是hex来表示?

    到目前为止,答案已经给出了一些默认输出,但可能不是正确的输出。

    如果我需要,我会编辑我的问题。:)

    我喜欢这个问题,我给了一个考虑的答案,帮助我们思考家庭作业,而不是给出已经存在的答案,我得到了一个下注,同时,"STD::StrueSt流"有一个投票。

    查看std::stringstream。

    我通常是用sprintf来完成的。因此,在很长一段时间内,假设您使用的是32位体系结构,则可以执行以下操作:

    char buf[5] = {0}; // one extra byte for null

    sprintf(buf,"%l", var_for_long);

    - 1。虽然C++编译器将编译您的代码,但它肯定不能被称为C++。另外,我怀疑5个字符足够了。

    请不要在这个时代提倡sprintf。我们没有足够的缓冲区溢出漏洞吗?并不是说这段代码似乎有任何书面的内容——但你永远不知道事情是如何变化的。

    菲尔,超过10000的任何数字都会溢出缓冲区。

    阿瓦卡-你说得对。-那会教我在从酒吧回家的路上发到那里。

    我同意printf家族存在一些危险,但我不认为我们可以逃离他们。在一个完美的世界里,我们可以忽略它们,但是我工作在C++代码库中,使用它们,知道它们是如何危险的是很好的。每当你接近低级系统编程时,你都会遇到这些调用。诚然,我的例子不是最好的,但现在它被记录了为什么它是坏的,其他人可以从中学习。在内部,我们使用asprintf和vasprintf来防止缓冲区溢出。

    展开全文
  • 请用C语言实现将double类型数据转换成字符串,再转换成double类型的数据、int类型的数据想要完成题目中的功能,首先我们的先对系统存储double的格式有所了解。浮点数编码转换使用的是IEEE的编码标准。类型存储位数​...
    请用C语言实现将double类型数据转换成字符串,再转换成double类型的数据、int类型的数据

    想要完成题目中的功能,首先我们的先对系统存储double的格式有所了解。

    浮点数编码转换使用的是IEEE的编码标准。

    类型
    存储位数
    偏置值
    数符(S)
    阶码(E)
    尾数(M)
    总位数
    十六进制
    十进制
    短浮点数(Single,float)
    1位
    8位
    23位
    32位
    7FH
    +127
    长浮点数(Double)
    1位
    11位
    52位
    64位
    3FFH
    +1023
    临时浮点数(扩展精度浮点数)
    1位
    15位
    64位
    80位
    3FFFH
    +16383

    如上图可以看到double类型占8字节空间,最高位存储符号位, 

    然后接下来11位存储(1023+指数位),剩下的52位存储的科学计数法的位数,

    整数部分默认为1,所以被省略了


    下面用实例解析一下:

    浮点数 -9988777.25  是负数,所以最高位为1

    然后将9988777.25转换成二进制 100110000110101010101001.01, 

    然后转换成科学计数就是1.0011000011010101010100101 * 2^23,那么指数就是23, 接下来11位是1023+23=1046  

    那么剩余的52位存储的尾数是0011000011010101010100101,不足52位在后门补0,多于52位的舍弃

    完整的64位存储值应该是这样的:   1   10000010110   0011000011010101010100101 000000000000000000000000000    =  0xC1630D5528000000


    下面我们按照国际惯例用vs2013建个工程,里面输入代码,在 double db = -9988777.25处打个断点,

    F5调试起来,然后在内存窗口查看变量db, 可以看到如下图   0x002BFBA8  00 00 00 28 55 0d 63 c1


    可以看到正好和我们推算的值0xC1630D5528000000相等。



    实现代码的时候发现这个花费的时间有点长啊,感觉不对劲,再看看题目发现我跑题了,

    题目中说用C语言实现,没有限定我们使用C标准库,那么我们用ecvt这个函数来获取他的符号位和指数,

    简单处理一下字符串中的小数点就行了。下面上代码:



    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    //double 转换成 字符串      double to ascii
    char* dtoa(double Val, int NumberOfDigits, int *Dec, int *Sign)
    {
    	//NumberOfDigits是精度,Dec是指数,Sign表示是否有符号
    	char *pdouble = ecvt(Val, NumberOfDigits, Dec, Sign);
    	
    	//添加小数点到字符串中
    	int i = 0;
    	for (i = strlen(pdouble); i >= *Dec; i--)
    	{
    		pdouble[i + 1] = pdouble[i];
    	}
    	pdouble[i+1] = '.';
    	
    	//如果是负数添加负号到字符串前面
    	if (*Sign)
    	{
    		for (i = strlen(pdouble); i > 0; i--)
    		{
    			pdouble[i + 1] = pdouble[i];
    		}
    		pdouble[0] = '-';
    	}
    	return pdouble;
    }
    
    int main()
    {
    	int Dec = 0, Sign = 0;
    	char *p;
    	double db;
    	int idb;
    
    	//double类型转换成字符串
    	p = dtoa(9988777.25, 10, &Dec, &Sign);
    
    	//字符串转换成double
    	db = atof(p);
    
    	//字符串转换成int
    	idb = atoi(p);
    
    	printf("%s  %lf   %d\n",p, db, idb);
    
    	return 0;
    }

    运行效果如下:



    如果有什么问题和疑问可以在下面留言互相探讨。

    原题我已经上传到这里了http://download.csdn.net/detail/yincheng01/6461073 ,

    解压密码为 c.itcast.cn



    展开全文
  • double浮点数转换成字符串源码。
  • 方法如下:  public static void main(String args[]) throws Exception{  BigDecimal d = new BigDecimal("77777755555512345321111111114646465464.1256547");  String s=d.setScale(2, BigDecimal.ROUND_HALF_...

    方法如下: 

    public static void main(String args[]) throws Exception{
      BigDecimal d = new BigDecimal("77777755555512345321111111114646465464.1256547");
      String s=d.setScale(2, BigDecimal.ROUND_HALF_UP).stripTrailingZeros().toPlainString();
      System.out.println(s);

     }

     

    转载请注明出处:http://blog.sina.com.cn/xilexu

    展开全文
  • 在使用double类型的时候,常常使用String.valueOf(Double d)方法来将double转换成String,而String.valueOf(Double)调用的是Double自身的toString()方法。 [code="java"]/** * Returns the string ...
  • double atof( const char *string ); 字符串转换成数字double int atoi( const char *string ); 字符串转换成数字int long atol( const char *string ); 字符串转换成数字long Return
  • 一、各种数字类型转换成字符串型: public static void main(String[] args) { double value = 123456.123; String str = String.valueOf(value); // 其中 value 为任意一种数字类型。 System.out.println...
  • 方法1:采用静态方法 int a = 123456789; String str = String.valueOf(a...方法2:用包装类转换 float a=2.33f; String str=Float.toString(a); double a=2.33d; String str=Double.toString(a); 总结:是...
  • sprintf转换一个double型的数据时如何在%e控制指数的宽度 例如:一个这样的数:double a = 1.1550460E+05 采用sprintf("%.7e", a); 输出时会输出三个倍数的指数,1.1550460E+005 请问各位如何设置e前面的...
  • 各种数转换成字符串

    2012-03-06 10:45:34
    double转化成字符串 int 转化成字符串 貌似不少人都不清楚这个问题。。。。今天去百度知道里逛,发觉有个人问怎么把浮点数转化成字符串,居然4个人的回答都不对。。。。。 为了避免杯具继续,在这里说明...
  • 1、整型》字符串 _itoa()把整型变字符串   2、float类型》字符串 float m; m=1.2; CString str; str.Format("%f",m);     Format (const char *, parameter)  FORMAT就是格式化的意思, 第一个...
  • 语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点型等)的数字转换为字符串,下面列举了各函数的方法及其说明。 ● itoa():将整型值转换为字符串...除此外,还可以使用sprintf系列函数把数字转换成字符串
  • Float Convert delphi浮点数转换程序,将浮点数类型转换成字符串,输入浮点数后,可以指定是否对十进制指数部分、一定使用指数等,还可选择二进制(Binary)、八进制(Octal)、十六进制(Hexdecimal)等。运行时请把...
  • Atmel Studio 6.2集成开发环境编写...在项目中需要把double型数据转换成char型字符串。本想自己写数据转换程序,写之前先上网看看前人们有什么经验,一番搜索发现AtmelStudio 中自带的dtostrf()函数可以实现这一功能
  • #include double atof(const char *nptr);...将字符串转换成整形数long atol(const char *nptr);将字符串转换成长整型数double strtod(const char *nptr, char **endptr);将字符串转换成双精度浮点数long int str...
  • 要写一个函数,传三个参数,double,int ,bool 三个参数。 作用就是:传double进来 用int来取小数位数 ,bool用来确认是否要四舍五入。 返回的为cstring的 例如: 如果传一个double的 如12345.6789 然后传一个int...
  • 字符串转换成double类型

    千次阅读 2015-11-24 22:52:34
    double dd = Double.valueOf("123.2"); 同理Integer整数,Long都有相关的valueof来转换string。
  • 如何将整数int转换成字符串String?

    千次阅读 2014-09-25 15:41:13
    如何将整数int转换成字符串String? 答:有三种方法:   1)String s = String.valueOf(i); 2)String s = Integer.toString(i); 3)String s = "" + i; 注:Double, Float, Long 转成字串的方法大同小异。
  • 0.34-----转换成字符串变为0.3 0.35-----转换成字符串变为0.4 0.30-----转换成字符串变为0.3 请问如何实现?
  • javaSe-1.7 double d1 = 1; double d2 = 1.1; double d3 = 1.1111111111111111111111111111111; double d4 = 1.1111111111111111; double d5 = 1.111111111111111; double d6 = 1.11111
  • 前面实现了字符串转换成整形数值。参考这里: 它不支持小数,不支持符号(正、负号) 现在实现一个更复杂一点字符串转换成数值的程序。 它支持“浮点字符串转换成对应的浮点数值,如: "123.45" --> 123.45 ...
  • C语言转换形式: std::string str; int i = atoi(str.c_str()); C++转换形式(C++11): std::string str; int i = std::stoi(str); stol(long), stof(float), stod(double)也相同的用法的。
  • string类型的文本输入的是double的类型字符串然后强制转换为int类型报错 例如输入:123.36 然后直接强制转换成int类型会报错:java.lang.NumberFormatException: For input string: “123.36” 像这样不能直接转换,...
  • 字符串转换成double和float总结

    万次阅读 2013-08-04 11:48:21
    一、atof()和strtod(char * ,char **)函数转换成double类型 头文件是stdlib.h  用double atof(char *)可以 用double strtod(char * ,char **)也可以,用这个函数时,一般第二个参数设置为NULL  #include #...
  • #include #include using namespace std; void catstring(double num1, double num2) { char snum1[128] = { 0 }; char snum2[128] = { 0 }; _gcvt(num1, 10, snum1); _gcvt(num2,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,440
精华内容 576
关键字:

double转换成字符串