round redondear net midpointrounding ejemplos decimals decimales awayfromzero c# wpf datagrid

redondear - round double c#



C#- Math.Round(double d, 2, MidPointRounding.AwayFromZero) Produce muchos decimales (0)

Así que estoy haciendo una pequeña codificación por el placer de hacerlo y me he encontrado con un problema. Ahora bien, esta puede ser una pregunta duplicada, pero por amor de mí no puedo encontrar a nadie más con el mismo problema, así que aquí va;

Estoy tratando de redondear un doble generado aleatoriamente, a 2 decimales. Y esto funciona como se espera la mayor parte del tiempo. Sin embargo, cada cierto tiempo, mi código produce dobles con hasta 10+ decimales, lo cual es realmente molesto, ya que los valores se muestran en un DataGrid en WPF y el DataGrid simplemente cambia de tamaño para ajustarse al número. El código que estoy usando para generar mis dobles:

double d = rand.NextDouble() + .5; // I have more of these, differing from + .5 to + 2

Y luego para redondearlo, uso:

Math.Round(d, 2, MidPointRounding.AwayFromZero);

Y la mayoría de las veces, funciona sin problemas, pero de vez en cuando produce números como:

0.639999999999999

¿Alguien puede explicar lo que estoy haciendo mal aquí? Gracias por adelantado.

Edit 1: Entonces no lo hago exactamente como dije. Si esto tiene algo que ver con por qué no funcionará, me gustaría saber, pero la forma en que realmente creo mis dobles es;

Math.Round(rand.NextDouble() + .5, 2, MidPointRounding.AwayFromZero);

Sin embargo, no puedo ver por qué marcaría una diferencia, si crear una doble primero, y luego redondearlo, o si simplemente instalo un doble recientemente creado.

Editar 2: a petición, publico mi código DataGrid. XAML y codebehind se ven así: XAML:

<DataGrid x:Name="marketDataGrid" HorizontalAlignment="Left" Margin="13,225,0,0" VerticalAlignment="Top" Height="204" Width="303" CanUserAddRows="False" CanUserDeleteRows="False" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" SelectionMode="Extended" IsReadOnly="True"> <DataGrid.Resources> <Style TargetType="DataGridRow"> <EventSetter Event="MouseDoubleClick" Handler="MarketRow_DoubleClick" ></EventSetter> </Style> </DataGrid.Resources>

Y el código detrás de los eventos de doble clic:

private void MarketRow_DoubleClick(object sender, RoutedEventArgs e) { DataGridRow row = sender as DataGridRow; Company c = (Company)marketDataGrid.SelectedItem; BuyWindow bw = new BuyWindow(c, pc, this); bw.Show(); }

Y el código donde agrego la lista de objetos

marketDataGrid.ItemsSource = cc.GetCList(); marketDataGrid.Items.Refresh();

Por favor, avíseme si necesita más. Podría subir todo el proyecto a algún lado si quieres revisarlo todo. Probablemente me sienta un poco avergonzado de hacerlo, ya que mi código no es exactamente bonito en todos los sentidos.

Puede ser un error en mi nombre ... Pero no lo creo. He analizado la solución con bastante cuidado.