假设我有一个3.4679的值,想要3.46,我怎样才能截断到两位小数,而不是四舍五入? 我已经尝试了以下但所有三个给我3.47: void Main() { Console.Write(Math.Round(3.4679, 2,MidpointRounding.ToEven)); Console.Write(Math.Round(3.4679, 2,MidpointRounding.AwayFromZero)); Console.Write(Math.Round(3.4679, 2)); } 这返回3.46,但似乎肮脏一些如何: void Main() { Console.Write(Math.Round(3.46799999999 -.005 , 2)); }
我有一个数字,例如1.128347132904321674821,当输出到屏幕(或写入文件)时,我想只显示两位小数。 一个人怎么做? x <- 1.128347132904321674821 编辑: 指某东西的用途: options(digits=2) 已被build议作为可能的答案。 有一种方法可以在脚本中指定一次性使用吗? 当我将它添加到我的脚本中时,它似乎没有做任何不同的事情,我不想重新input格式化每个数字(我自动化一个非常大的报告)。 – 答案:round(x,digits = 2)
我刚刚重新阅读了Python 3.0中的新增function ,并指出: round()函数舍入策略和返回types已更改。 准确的中途情况现在四舍五入到最接近的结果,而不是从零开始。 (例如,round(2.5)现在返回2而不是3) 和一轮的文件: 对于支持round()的内置types,将值四舍五入为功率减n的10的最接近倍数; 如果两个倍数相等,则舍入为偶数select 所以,在v2.7.3下: In [85]: round(2.5) Out[85]: 3.0 In [86]: round(3.5) Out[86]: 4.0 正如我所料。 但是,现在在v3.2.3下: In [32]: round(2.5) Out[32]: 2 In [33]: round(3.5) Out[33]: 4 这看起来是违反直觉的,与我对四舍五入的理解是相反的(并且会绊倒人)。 英语不是我的母语,但直到我读到这个,我以为我知道四舍五入是什么意思: – /我相信在引入v3的时候,一定有一些这样的讨论,但我无法find一个很好的理由我的search。 有没有人有洞察到为什么这改变了? 有没有其他的主stream编程语言(例如, C,C ++,Java,Perl, ..)这样做(对我来说是不一致的)四舍五入? 我在这里错过了什么? 更新:@ Li-aungYip的评论“银行家的四舍五入”给了我正确的search词/关键字search,我发现这个问题: 为什么.NET使用银行家舍入为默认? ,所以我会仔细阅读。
将PHPstring舍入到2位小数的正确方法是什么? $number = "520"; // It's a string from a DB $formatted_number = round_to_2dp($number); echo $formatted_number; 输出是“520.00”; 函数round_to_2dp()定义应该如何?
使用.ToString()显示当前小数的值时,精确到15个小数位,因为我使用它来表示美元和美分,所以我只希望输出为2位小数。 我是否使用.ToString()的变体?
似乎减法正在引发某种问题,结果是错误的。 double tempCommission = targetPremium.doubleValue()*rate.doubleValue()/100d; 78.75 = 787.5 * 10.0 / 100d double netToCompany = targetPremium.doubleValue() – tempCommission; 708.75 = 787.5-78.75 double dCommission = request.getPremium().doubleValue() – netToCompany; 877.8499999999999 = 1586.6 – 708.75 由此产生的预期值将是877.85。 应该做些什么来确保正确的计算?
根据文档, decimal.Round方法使用了一个循环算法,这在大多数应用程序中并不常见。 所以我总是最终编写一个自定义函数来做更自然的round-half-up算法: public static decimal RoundHalfUp(this decimal d, int decimals) { if (decimals < 0) { throw new ArgumentException("The decimals must be non-negative", "decimals"); } decimal multiplier = (decimal)Math.Pow(10, decimals); decimal number = d * multiplier; if (decimal.Truncate(number) < number) { number += 0.5m; } return decimal.Round(number) / multiplier; } 有人知道这个框架设计决定背后的原因吗? 在框架中是否有内置的半舍引算法? 或者,也许一些非托管的Windows API? […]