【发布时间】:2013-03-24 19:35:38
【问题描述】:
我必须使用非科学(即无尾数/指数/E)字符串转换十进制数。我的代码如下所示:
/*!
\brief Converts a <em>XML Schema Decimal</em>
*/
char *ToDecimal(double val) const
{
const size_t nMax = 200;
char *doubleStr = new char[nMax];
sprintf(doubleStr, "%1.6f", val);
return doubleStr;
}
问题是当输入val 是1 然后函数返回1.000000 但我希望输出1。另外,如果我将代码更改为sprintf(doubleStr, "%1.0f", val);,那么它会正确输出1,但如果输入val 更改为0.000005,则输出为0,我希望输出为@987654332 @。所以基本上我希望所有输出尽可能短,并删除所有不必要的0。 sprintf 可以做到这一点吗?我想用这个函数支持 3.4E +/- 38 范围。
【问题讨论】:
-
那么如果输入是1e-30,你希望输出是0.000000000000000000000000000001吗?
-
您必须编写代码将其转换为字符串并去除零并返回字符串。如果你想让它改变,你还必须传递位置的数量,因为当然 0.1 作为常数实际上并不等于 0.1。
-
@anatolyg 是的,一直到 3.4E-38。尝试实现对 XML Schema Decimal 的支持。 w3.org/TR/xmlschema-2/#decimal-lexical-representation