【发布时间】:2012-09-10 21:34:01
【问题描述】:
我的 ComboBox 的 ItemsSource 绑定到 List<double> options 并且 SelectedItem 绑定到属性 double SelectedOption。
如果options 包含值0.0060F, 0.0075F, 0.0100F 和SelectedItem = 0.0060F,ComboBox 应该但不会反映这一点。相反,选择 ComboBox 会显示 options 列表项及其奇怪的十进制表示。是否可以对具有不可预测表示的double 类型的变量进行数据绑定?
代码
视图模型:
//Properties
public List<double> Options{get;set;}
public double SelectedOption{get;set;}
//Constructor
public ViewModel()
{
Options = new List<double>();
Options.Add(0.0060F);
Options.Add(0.0075F);
Options.Add(0.0100F);
SelectedOption = 0.0060F;
}
绑定:
<ComboBox ItemsSource="{Binding Path=Options}"
SelectedItem="{Binding Path=SelectedOption, Mode=TwoWay}" />
组合框中显示的选项有:
- 0.00600000005215406
- 0.00749999983236194
- 0.00999999977648258
【问题讨论】:
-
提供一些代码。这应该没有问题。
-
您是说 Double.ToString() 为您提供不同的格式,具体取决于值。或者浮点固有的不准确性并没有给您添加的确切值?
-
我已经添加了如何设置所有内容的代码。当应用程序调试时,所有这些浮点数都显示在 Visual Studio 监视中,并带有它们分配的确切值。即使在手表中使用 .ToString() 也会显示我分配的值,而不是帖子列表中的长十进制数字。
-
@TonyHopkinson 我相信这是由于浮点数的不准确性引起的。但似乎 0.0060F == 0.0060F 是正确的,并且绑定将基于此工作。该列表包含一个 0.0060F 并且所选选项设置为 0.0060F,似乎这些是相关的。
-
恐怕不是,基本上如果重要的是要正确选择精度,请使用定点类型(例如十进制)而不是浮点。 FP 并不意味着准确或精确,它意味着有一个小数点在某处浮动。当您增加了处理 FP 不准确的开销时,任何所谓的速度优势都将不复存在。
标签: c# silverlight data-binding combobox double