如何求一个double类型变量的长度

twanyong2 2010-04-11 09:57:24
RT,若一个double变量a=123.45678,需要给出a的长度为9(8个数字加一个小数点)。本人的思路是首先将a转换成string类型的变量,然后求长度。但似乎没有这样的转换函数。谢谢了
...全文
2171 35 打赏 收藏 转发到动态 举报
写回复
用AI写文章
35 条回复
切换为时间正序
请发表友善的回复…
发表回复
Frog1228 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 27 楼 arong1234 的回复:]
他这种方式要求被求的double必须是硬编码的,如果真是硬编码的,那这个题目无非就是一个strlen的问题,我想,为了演示预编译符号#,还没有必要出这种题目。

引用 24 楼 lcl_data 的回复:
字符串化运算符#
在宏参数的前面放一个#会使编译器在展开宏时插入参数的名字而不是它的值。其主要效果是把参数的名字转换为字符串。下面的范例演示了字符串化运算符的语法:
#define S……
[/Quote]
何为硬编码?
搜double,无意中搜到这个贴,看看。
CSDMAdmimistrator 2010-04-12
  • 打赏
  • 举报
回复
不过实现楼主这需求没有任何的现实意义
CSDMAdmimistrator 2010-04-12
  • 打赏
  • 举报
回复
恰好楼主要的就是硬编码对应的字符串的长度
如果楼主想要的是一个double变量在console中输出的长度
用sprintf和strlen即可
arong1234 2010-04-12
  • 打赏
  • 举报
回复
他这种方式要求被求的double必须是硬编码的,如果真是硬编码的,那这个题目无非就是一个strlen的问题,我想,为了演示预编译符号#,还没有必要出这种题目。
[Quote=引用 24 楼 lcl_data 的回复:]
字符串化运算符#
在宏参数的前面放一个#会使编译器在展开宏时插入参数的名字而不是它的值。其主要效果是把参数的名字转换为字符串。下面的范例演示了字符串化运算符的语法:
#define STRINGLIZE(ivalue) printf(#ivalue " is: %d", ivalue)

int ivalue = 2;
STRINGLIZE(ivalue);
这个宏的输出如下:
iv……
[/Quote]
ithiker 2010-04-12
  • 打赏
  • 举报
回复
好像是道ACM题,记得做过...
Sephoenix 2010-04-12
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!小技巧:教您如何更快获得可用分
s79947171 2010-04-12
  • 打赏
  • 举报
回复
very good!
hebeiliuzhao0909 2010-04-12
  • 打赏
  • 举报
回复
纯粹探讨问题
YHL27 2010-04-12
  • 打赏
  • 举报
回复
very good!
2010-04-11
  • 打赏
  • 举报
回复
楼主需要找一个或者自己实现一个十进制浮点库。
arong1234 2010-04-11
  • 打赏
  • 举报
回复
double转换出的字符串长度是受字符串格式符号控制的,而不是double的值控制的。由于10进制的浮点数无法用二进制数准确表达,你永远不可能实现楼主想要的东西的。所有想要得到答案和尝试给出答案的,都是对double的本质没有了解
[Quote=引用 23 楼 lcl_data 的回复:]
引用 21 楼 csdmadmimistrator 的回复:
就是转换成string 然后求长度?
[/Quote]
十八道胡同 2010-04-11
  • 打赏
  • 举报
回复
字符串化运算符#
在宏参数的前面放一个#会使编译器在展开宏时插入参数的名字而不是它的值。其主要效果是把参数的名字转换为字符串。下面的范例演示了字符串化运算符的语法:
#define STRINGLIZE(ivalue) printf(#ivalue " is: %d", ivalue)

int ivalue = 2;
STRINGLIZE(ivalue);
这个宏的输出如下:
ivalue is: 2
谢谢CSDMAdmimistrator,让我学习到了#
十八道胡同 2010-04-11
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 csdmadmimistrator 的回复:]

真的要实现这么BT的要求的话
可以考虑用以下方法
C/C++ code
#include <iostream>
#include<string>
using namespace std;
class Double
{
public:
Double(double d,const string&str):m_d(d),m_str(str){}
operator double……
[/Quote]
就是转换成string 然后求长度?
CSDMAdmimistrator 2010-04-11
  • 打赏
  • 举报
回复
给Double多给一个函数
int Length()const{return m_str.length();}

友情提示:结帖前请认真看本人签名
CSDMAdmimistrator 2010-04-11
  • 打赏
  • 举报
回复
真的要实现这么BT的要求的话
可以考虑用以下方法
#include <iostream>
#include<string>
using namespace std;
class Double
{
public:
Double(double d,const string&str):m_d(d),m_str(str){}
operator double()const{return m_d;}
const string& ToString()const{return m_str;}
protected:
double m_d;
string m_str;
};
#define DOUBLE(d) Double(d,#d)
int main()
{
Double d =DOUBLE(999999999.0000001);
cout<<d.ToString()<<endl;
cout<<d<<endl;
return 0;
}

CSDMAdmimistrator 2010-04-11
  • 打赏
  • 举报
回复
了解一下浮点数的表示方法你就知道原因了
老邓 2010-04-11
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 csdmadmimistrator 的回复:]

不要尝试输出double类型字面值的长度
二楼的试一下如下代码
C/C++ code
double a = 999999999.0000001;

如果真的要输出
需要宏来辅助
[/Quote]
虽然我不在二楼,但我感觉你说的应该是我。
果然,得不到正确的结果!

为什么会抛弃小数点后面的.0000001呢?精度?
CSDMAdmimistrator 2010-04-11
  • 打赏
  • 举报
回复
不要尝试输出double类型字面值的长度
二楼的试一下如下代码
 double a = 999999999.0000001;

如果真的要输出
需要宏来辅助
老邓 2010-04-11
  • 打赏
  • 举报
回复
不过,不用 .100f 这么夸张吧,呵呵,VC9上的精度最大支持18位。
老邓 2010-04-11
  • 打赏
  • 举报
回复
char str[105]={0};
改101不行,得改到105,才不溢出,而且结果是对的!厉害!
加载更多回复(15)

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧