double.parse转换的奇怪问题

时间:2013-01-18 14:33:13

标签: c# textbox double currency

我正在使用visual studio 2010,windows form。

我有这个代码,允许将货币从美元兑换成欧元。这是参考:http://www.codeproject.com/Articles/17909/Simple-Class-to-get-Currency-Exchange-Rates

这是代码:

CurrencyConverter2 cc = new CurrencyConverter2();
cc.AdjustToLocalTime = true;

CurrencyData cd = new CurrencyData("USD", "EUR");
// Convert US Dollars to Euros

cc.GetCurrencyData(ref cd);

label5.Text = (5000 / cd.Rate).ToString();

此案例的输出为:3753,75375375375

但是如果我以这种方式从texbox中放置值(例子5000):

double cambiamo = double.Parse(tbxDaConvertire.Text);
tbxConvertito.Text = (cambiamo * cd.Rate).ToString();

输出为:3752,5

我不明白,因为我得到了这个价值! 我该怎么解决呢?

2 个答案:

答案 0 :(得分:3)

正如评论所指出的那样:

        double cdRate = 1.42f;

        var value1 = (5000 / cdRate).ToString();
        var value2 = (double.Parse("5000") / cdRate).ToString();
        var value3 = (5000.0f / cdRate).ToString();

        //    value1 = "3521.12686697913"
        //    value2 = "3521.12686697913"            
        //    value3 = "3521.12686697913"

您的CD率最有可能不同。在第一个示例中,您可以使用5000 / cd.Rate,然后在第二个示例中使用5000 * cd.Rate - 您有时会执行cd.Rate = 1/cd.Rate吗?这可能是出现差异的地方。

答案 1 :(得分:1)

您的第一次转化使用的转化率为0.75075

您的第二次转化使用的转化率为0.75050

只有0.00025差异,很容易找回过去一周转换率的图表:

enter image description here

注意极端波动率,费率在分钟中变化。换句话说,它在您编辑代码时发生了变化。显然,您正在通过货币转换服务获取实时更新。