C# - Math.Round(double d,2,MidPointRounding.AwayFromZero)产生多个小数

时间:2016-12-20 13:28:54

标签: c# wpf datagrid

所以我为它做了一些编码,我遇到了一个问题!现在,这可能是一个重复的问题,但我可以为我的爱而找不到其他有同样问题的人,所以这里就是这样;

我正在尝试将Random生成的double舍入到2个小数点。这大部分时间都按预期工作。然而,偶尔,我的代码会产生最多10个小数的双精度,这真的很烦人,看到值在WPF中的DataGrid中显示,而DataGrid只是调整大小以适应数字。我用来生成双打的代码:

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

然后围绕它,我使用:

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

大多数时候,它完美无瑕地工作,但每隔一段时间,就产生如下数字:

0.639999999999999

有谁能解释我在这里做错了什么? 提前谢谢。

编辑1: 所以我完全不像我说的那样做。如果这与它为什么不能工作有任何关系,我想知道,但我实际创造双打的方式是;

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

然而,我无法理解为什么它会有所作为,如果创建一个双重优先,然后围绕它,或者我只是对一个新创建的double进行实例化。

编辑2: 根据请求,我发布了我的DataGrid代码。 XAML和代码隐藏看起来像这样: 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>

双击事件背后的代码:

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();
    }

我添加对象列表的代码

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

如果您需要更多,请告诉我。如果你想仔细研究一下,我可以将整个项目上传到某个地方。我这样做可能会有点尴尬,因为我的代码并不完全相同。

这可能是我的错字......但我不这么认为。我仔细查看了解决方案。

0 个答案:

没有答案