目前我正在尝试匹配C#和C ++应用程序。在C ++方面,当有值时,请说:
const char* svalue = "554.1327";
当我使用sscanf
时:
float x;
sscanf(svalue, "%f", &x);
x
将等同于554.13269
,即它具有“额外的”有效数字,即使它们可以舍入到相同的值。 (我认为此应用程序使用不同的float
类型,可以容纳超过7个有效数字。)
我不想改变C ++方面。我希望我的单独C#appliaction也能这样做。
例如,如果我有浮动23423.29
,我想将其转换为23423.289
,这是double
(因为在C#中,标准为float
不超过7个有效数字),然后将double
转换为字符串。
我似乎找不到一种方法来做到这一点。有任何想法吗?或者我是否必须创建自己的函数或从C#端调用相同的C ++函数...?
答案 0 :(得分:0)
嗨,您的问题有一个临时解决方案,如
Double d = 23423.29f;
int a = 23423.29.ToString().Length;
Console.WriteLine(d.ToString().Remove(++a));
给出结果
23423.289
答案 1 :(得分:0)
“如果我有浮动
23423.29
[...]”
请注意,在C#中,文字23423.29
的类型为double
。 float
文字后缀为f
,例如23423.29f
。
话虽这么说,从float
转换为double
时,.NET中也会出现其他数字:
float f = float.Parse("23423.29"); // results in f == 23423.29f
double d = (double)f; // results in d == 23423.2890625
阅读问题this answer Convert float to double without losing precision,了解为何会出现这些额外数据。
当您转换回字符串时,您可以通过numeric format string控制数字的数量,例如:
string s = d.Format("F3"); // will include 3 digits after the decimal point