C#Double不受Math.Round的影响 – 为什么?
我现在有这段代码:
totalCost = fuelPrice * purchaseVolume; totalCost = Math.Round(totalCost,2); Console.WriteLine("Total Cost = £" + totalCost); 如果燃油价格为1.15且油量为2,则console.writeline将显示总成本为2.3英镑,而不是2.30,因为我正在尝试实现.我究竟做错了什么? 解决方法
你是四舍五入,而不是格式化:-)
你不需要Math.Round,你需要: Console.WriteLine("Total Cost = £ {0:F2}",totalCost); 您可以通过以下方式查看它:计算机以某些格式表示内部数字.这些格式通常是二进制格式,并且不仅仅是“凡人”的??“易于理解”. double是这些格式之一.它是固定长度的格式,因此每个双倍长度为8个字节.当你想在某个地方打印它时,你必须“字符串化”它(将其转换为人类可以理解的格式).在C#/ .NET中,这通常使用所有对象都具有的ToString()方法来完成. 现在,在一个双1.0 == 1.00 == 1.额外的零没有保存(因为它们通常不重要) Math.Round“生成”一个带有最大小数位数的double(我们将忽略double的变幻莫测).所以Math.Round(1.222,2)== 1.22,但是Math.Round(1.0,2)== 1 Console.WriteLine是不同的东西.在这种情况下,它需要一个double并对其进行字符串化(并将其显示在控制台屏幕上).当你对一个数字进行字符串化并告诉Console.WriteLine你想在.之后需要2位小数时,它将显示2位小数,即使小数为零也是如此.所以Console.WriteLine(“{0:F2}”,1)将打印1.00.可能Console.WriteLine使用double的ToString方法来执行它.所以实际上,分析Double的ToString方法会更好,因为Console.WriteLine(“总成本=£{0:F2}”,totalCost)可能在内部与Console.WriteLine非常相似(“总成本=£ {0}“,totalCost.ToString(”F2“)); 我忘记了.正如AVD在对你的帖子的评论中告诉你的那样.浮动和双重可能是信息技术最大的两个邪恶. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- C#文件上传的简单实现
- iphone – Xcode – 修改库搜索路径基于正在编译代码的设备
- c# – 自定义功能区在ThisAddIn_Startup之前加载,但是我想在
- ruby-on-rails – rails authenticate_or_request_with_htt
- ReactNative教程 — Hello React Native
- vue通过点击事件读取音频文件的方法
- AJAX请求时status返回状态明细表 readyState的五种状态
- ORACLE10G卸载过程
- cocos2d-iphone – CCNode和CCLayer之间的区别?
- c# – virtualizingstackpanel如何计运算符大小而不实例化实