如何“追加”重要数字从浮动值加倍

时间:2012-08-29 08:06:27

标签: c# double rounding floating-point-precision

目前我正在尝试匹配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 ++函数...?

2 个答案:

答案 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的类型为doublefloat文字后缀为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