我有下面的代码snipppet。CString。格式问题
double db = 1/1000000;
CString csStr("";
csStr.Format('%.10f',ct);
基本上的db
值为0.000001
。
我需要将此值存储为csStr
。
MFC VC++中的格式语句是否正确?
另外,db
可以是1/100
或1/100000000000
。
我不能在csStr
中存储trucated值或四舍五入的值。那可能吗?
我有下面的代码snipppet。CString。格式问题
double db = 1/1000000;
CString csStr("";
csStr.Format('%.10f',ct);
基本上的db
值为0.000001
。
我需要将此值存储为csStr
。
MFC VC++中的格式语句是否正确?
另外,db
可以是1/100
或1/100000000000
。
我不能在csStr
中存储trucated值或四舍五入的值。那可能吗?
你有两个问题需要解决这里:
所以你问的是不可能的,一般来说。
现在,您所询问的值有一个精确的有限小数位数,十进制表示形式(但并非所有这些都是精确的FP表示形式),并且感谢CString :: Format舍入函数,您如果你做得很好,最有可能得到存储在csStr中的正确值。
您的代码具有一定的问题(校正,使得它编译):
double db = 1/1000000; // [1]
CString csStr(""); // [2]
csStr.Format("%.10f", db); // [3]
[1]这存储在分贝0.0。它将整除计算为0,然后将其转换为双精度。代替double db = 1.0/1e6;
(或1.0/1000000)。
[2]你不需要初始值设定项。 CString被初始化为空字符串
[3]这会在字符串中存储“0.0000010000”。
如果您不想要尾随零,请将“%lf”写为格式。
根据文档,“该值四舍五入到合适的位数”。如果精度足够了,你会得到正确的数字,但是如果你没有足够的精度(例如,如果你指定精度为6,数字为0.00000001),或者有零结尾达到指定的精度。
那该怎么办?就你而言,你说你会有1/100或1/100000000000。如果这是真的(你只能拥有这两个值),并且它不会改变(这将取决于你在做什么,但我不会相信这一点),你可以存储除数,然后创建字符串在飞行中,与if
什么的。
您也可以使用“%g”格式规范。它也完成四舍五入,但它删除任何尾随的零。警告(或好东西,取决于你在做什么)是它可以(并且将)以“1e-6”格式放置一些值。