当前位置: 首页 > 知识库问答 >
问题:

在创建对象期间转换货币时,C#中的舍入错误

甄煜
2023-03-14

我正在兑换货币,遇到了一个奇怪的四舍五入问题。以下是缩写代码:

var v = select new ValuationsModel
{
    LocalValue = dv.LocalValue,
    CurrencyId = dv.CurrencyId,
    FXRate = fx.ExchangeRate,
    USDValue = dv.LocalValue * (dv.CurrencyId == "USD" ? 1.0m : Convert.ToDecimal(fx.ExchangeRate)),
}).ToList();

decimal usdValue = v.LocalValue.Value * (v.CurrencyId == "USD" ? 1.0m : Convert.ToDecimal(v.FXRate));

以下是这些值(所有值都在“快速监视”窗口中验证过):

fx.exchangerate是Double类型

dv.currencyid是类型字符串

dv.localvalue是可为空的十进制类型

fx.ExchangeRate = 1.36678
dv.CurrencyId = "GBP"
dv.LocalValue = 15102141.1994

USDValue中的值为:20689933.443178=15102141.1994*1.37

USDValue中的值为:20641304.548515932=15102141.1994*1.36678

为什么fx.exchangerateselect new语句中四舍五入到1.37,而不是在下面完全相同的计算中四舍五入?我甚至把货币支票复制到第二个任务中,以确保这不会影响事情。如果想要精确,是否必须在select new语句之外进行计算?

共有1个答案

王涵育
2023-03-14

十进制和Double具有不同的精度级别。看这道题和这道题。这与计算机在处理浮点算术时的局限性,以及速度与高精度之间的权衡有关。

 类似资料:
  • 我试图编写一个round_up函数,将浮点数转换为整数,但是我获取小数位数的方法似乎有错误(浮点数%1的剩余部分)。如果浮点数是4.4,我希望将其转换为4;如果是4.5,我希望将其转换为5。错误消息:错误:无效的操作数到二进制%(有'浮动'和'int')

  • 下面是我的代码: 我试着做一个货币转换器,但我的代码直到美元不能运行,所以我还没有写欧元或日元。谢谢你的回复。

  • 本文向大家介绍C# .net实现货币转换示例,包括了C# .net实现货币转换示例的使用技巧和注意事项,需要的朋友参考一下 本文所述C# .net实现货币转换示例主要利用string.format 和cultureInfo 来进行转换。分享给大家供大家参考之用。具体方法如下: 主要实现代码如下: 希望本文所述对大家的C#程序设计有所帮助

  • 我试过... 但那就不允许便士条目了。 我想要增量按钮控制在英镑上升,但仍然想要输入便士的能力。 谢谢,1DMF

  • 当我按下按钮时,应用程序会崩溃。每个转换“国名”功能都是一个按钮。我会在评论中发布错误。提前道谢。

  • 我有一个熊猫列,其中包含时间数据和列数据类型是对象。 如何将列转换为Datatime