4

我有一个浮点值: ( data->val),它可能是三个可能的浮点精度:,%.1f我将如何格式化它以仅显示必要的小数点数?例如:%.2f%.3fCString::Format

CString sVal;

sVal.Format(L"%.<WHAT GOES HERE?>f", data->val);
if(stValue)
    stValue->SetWindowText(sVal);

就像我不希望格式化字符串末尾有任何额外的零一样。

4

2 回答 2

7

如果您知道您想要的精度,只需使用%.*f并将精度作为整数参数提供给CString::Format. 如果您想要最简单的有效表示,请尝试%g

int precision = 2; // whatever you figure the precision to be
sVal.Format(L"%.*f", precision, data->val);
// likely better: sVal.Format(L"%g", data->val);
于 2012-11-05T16:13:56.427 回答
1

它是前一段时间的,但也许这会工作......

CString getPrecisionString(int len)
{
   CString result;
   result.format( "%s%d%s","%.", len, "f" );
   return result;
}

// somewhere else
CString sVal;

sVal.Format(getPrecisionString(2), data->val);
if(stValue)
    stValue->SetWindowText(sVal);

另一种方法是,在添加 %.3f 值后删除 '0'

sVal.trimEnd('0')

但很危险,因为你可能有“。” 在末尾...

于 2012-11-05T16:06:34.633 回答