所以我为它做了一些编码,我遇到了一个问题!现在,这可能是一个重复的问题,但我可以为我的爱而找不到其他有同样问题的人,所以这里就是这样;
我正在尝试将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();
如果您需要更多,请告诉我。如果你想仔细研究一下,我可以将整个项目上传到某个地方。我这样做可能会有点尴尬,因为我的代码并不完全相同。
这可能是我的错字......但我不这么认为。我仔细查看了解决方案。