浮动到字符串转换

Nom*_*are 4 c# string type-conversion

我想将浮点值转换为字符串.

以下是我用于转换的代码.

static void Main(string[] args)
        {
            string s =string.Format("{0:G}", value);                
            Console.Write(s);
            Console.ReadLine();
        }
Run Code Online (Sandbox Code Playgroud)

它输出为 2.5

但我的问题是我想获得价值,2.50因为我想在我的项目中稍后将其与原始值进行比较.

如果有办法,请建议我吗?

Sad*_*que 8

您应该使用{0:N2}格式化为两位小数.

string.Format("{0:N2}", 2.50)
Run Code Online (Sandbox Code Playgroud)

小数点后3位:

string.Format("{0:N3}", 2.50)
Run Code Online (Sandbox Code Playgroud)

等等.

您也可以以这种方式将值存储在字符串中而不必担心精度,然后将您的值转换为您要测试比较的值作为字符串:

string strDecimalVal = Convert.ToString( 2.5000001);
Run Code Online (Sandbox Code Playgroud)


Hei*_*nzi 5

因为我想在我的项目中稍后将其与原始值进行比较.

...然后你需要存储原始值所具有的小数位数.一旦值为浮点数,此信息就会丢失.的浮动交涉2.5,2.50并且2.500是完全一样的.

所以,基本上,你有以下可能性(按优先顺序):

  • 不要在旧值和新值之间进行字符串比较.将两个值都转换为float,然后比较它们(由于浮点数不准确,因此误差范围).
  • 存储旧值的小数位数,然后使用myFloat.ToString("F" + numDecimals.ToString())将其转换为字符串.
  • 将值存储为字符串而不是浮点数.显然,你将无法对该值进行数学计算.

另外,如果你不使用浮动坚持,decimals可能适合你的目的:在存储显著的位数:

decimal x = Decimal.Parse("2.50", CultureInfo.InvariantCulture);
decimal y = Decimal.Parse("2.500", CultureInfo.InvariantCulture);

Console.WriteLine(x.ToString()); // prints 2.50
Console.WriteLine(y.ToString()); // prints 2.500
Run Code Online (Sandbox Code Playgroud)