Я пытаюсь понять практическую полезность спецификатора формата G9 в C# при работе с числами с плавающей запятой в обратном направлении.
Книга C#12 в двух словах упоминает, что G9 помогает избежать потери точности при преобразовании числа с плавающей запятой в строку и обратно в число с плавающей запятой (стр. 324). Но я не могу найти пример, показывающий случай, когда форматирование G9 позволяет сохранить равенство, а форматирование по умолчанию не работает.
Например:
using System;
class Program
{
static void Main()
{
float originalNumber = 0.1f;
string defaultFormatted = originalNumber.ToString();
float defaultRoundTrip = float.Parse(defaultFormatted);
Console.WriteLine("Default Formatting:");
Console.WriteLine("Original: " + originalNumber);
Console.WriteLine("Formatted: " + defaultFormatted);
Console.WriteLine("Round-trip Equal: " + (originalNumber == defaultRoundTrip));
string g9Formatted = originalNumber.ToString("G9");
float g9RoundTrip = float.Parse(g9Formatted);
Console.WriteLine("\nG9 Formatting:");
Console.WriteLine("Original: " + originalNumber);
Console.WriteLine("Formatted: " + g9Formatted);
Console.WriteLine("Round-trip Equal: " + (originalNumber == g9RoundTrip));
}
}
Дает мне
Default Formatting:
Original: 0.1
Formatted: 0.1
Round-trip Equal: True
G9 Formatting:
Original: 0.1
Formatted: 0.100000001
Round-trip Equal: True
Я ожидал чего-то подобного:
Default Formatting:
Original: 0.1
Formatted: 0.100000000001
Round-trip Equal: False
G9 Formatting:
Original: 0.1
Formatted: 0.1
Round-trip Equal: True
Подробнее здесь: https://stackoverflow.com/questions/791 ... nd-trippin