Пример полезности спецификатора формата G9 в C# для округления чисел с плавающей запятой?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Пример полезности спецификатора формата G9 в C# для округления чисел с плавающей запятой?

Сообщение Anonymous »

Я пытаюсь понять практическую полезность спецификатора формата 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»