CString::Format("%lf"..精度太高了

caddor2011 2011-10-24 10:23:55



有一函数,根据用户传入的值,来求解它的长度


比如:320.10 ,长度为6

257.21 长度为6 我是用CString 来求解


int Length( double val)
{


CString str;

str.Format("%lf",val); // 导致 长度错误

return str.GetLength();


}


根源在于 double 给我添加了很多小数点



当然有其他办法求解,我觉得CString 比较方便,没想到 精度 捣乱

...全文
209 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2011-10-24
  • 打赏
  • 举报
回复
str.Format("%6.2lf",val);

赵4老师 2011-10-24
  • 打赏
  • 举报
回复
用10进制小数不能精确表示某些三进制小数0.1(3)=0.33333333333……(10)
同理,用二进制小数也不能精确表示某些10进制小数。

C:\Program Files\Microsoft Visual Studio\VC98\Include\FLOAT.H
...
#define DBL_DIG 15 /* # of decimal digits of precision */
#define DBL_EPSILON 2.2204460492503131e-016 /* smallest such that 1.0+DBL_EPSILON != 1.0 */
#define DBL_MANT_DIG 53 /* # of bits in mantissa */
#define DBL_MAX 1.7976931348623158e+308 /* max value */
#define DBL_MAX_10_EXP 308 /* max decimal exponent */
#define DBL_MAX_EXP 1024 /* max binary exponent */
#define DBL_MIN 2.2250738585072014e-308 /* min positive value */
#define DBL_MIN_10_EXP (-307) /* min decimal exponent */
#define DBL_MIN_EXP (-1021) /* min binary exponent */
#define _DBL_RADIX 2 /* exponent radix */
#define _DBL_ROUNDS 1 /* addition rounding: near */
...
luciferisnotsatan 2011-10-24
  • 打赏
  • 举报
回复
str.Format("%lf",(long double)val);
这样试试
caddor2011 2011-10-24
  • 打赏
  • 举报
回复
up up
caddor2011 2011-10-24
  • 打赏
  • 举报
回复
lg 是什么??



谁有法子,原汁原味的 ,获得 val 的长度??

val 是 358.30 6位长度,,,,

但是函数参数 类型为double 立即 给我转了精度

我不能改函数 ,改了函数,其他地方有要改,受不了





[Quote=引用 2 楼 zhao4zhong1 的回复:]
str.Format("%lg",val);
[/Quote]
赵4老师 2011-10-24
  • 打赏
  • 举报
回复
str.Format("%lg",val);
诶呦 2011-10-24
  • 打赏
  • 举报
回复
你的小数部分为2位,但是str.Format("%lf",val); 的val是按double的类型有效数字()转化的,也就是说他的小数部分有六位,那么你在str.GetLength();肯定就有问题了

64,646

社区成员

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

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