我有以下代码信息。
double db = 1 / 1000000;
CString csStr("";
csStr.Format( '%.10f',ct);
db
的价值基本上是0.000001
我需要将此值存储在csStr
中
MFC VC ++中的格式语句是否正确?
此外,db
可以是1/100
或1/100000000000
。
我不得在csStr
中存储trucated值或舍入值。这可能吗?
答案 0 :(得分:1)
这里有两个问题要处理:
总的来说,你问的是不可能的。
现在,你要问的值有一个精确的,有限小数位数,十进制表示(但不是所有这些都是精确的FP表示),并且由于采用了舍入CString :: Format,你'如果你做得好的话,很可能会得到存储在csStr中的正确值。
您的代码存在一些问题(已更正以便编译):
double db = 1 / 1000000; // [1]
CString csStr(""); // [2]
csStr.Format( "%.10f", db); // [3]
[1]这在db中存储0.0。它将除法计算为整数,得到0,然后将其转换为double。改为double db = 1.0/1e6;
(或1.0 / 1000000)。
[2]您不需要初始化程序。 CStrings初始化为空字符串
[3]这将在字符串中存储“0.0000010000”。 如果您不想使用尾随零,请将“%lf”写为格式。根据文档,“将值四舍五入为适当的位数”。如果精度足够,您将获得正确的数字,但如果您没有足够的精度(例如,如果您指定精度为6且数字为0.00000001),则可以舍入为0.0,或者尾随为零达到指定的精度。
那该怎么办?在你的情况下,你说你将有1/100或1/100000000000。如果那是真的(你只能有这两个值),并且它不会改变(这将取决于你正在做什么,但我不相信),你可以存储除数,然后创建字符串在运行中,使用if
或其他内容。
您还可以使用“%g”格式规范。它也进行舍入,但它会删除任何尾随零。警告(或者好处,取决于你正在做的事情)是它可以(并且将)以“1e-6”格式放置一些值。