【问题标题】:Double.ToString("N") rules on roundingDouble.ToString("N") 舍入规则
【发布时间】:2014-11-24 14:11:04
【问题描述】:
using System;

public class Program
{
    public static void Main()
    {
        double roundUp = 55.329;
        double roundDown = 55.324;
        double awayFromZero = 55.325;
        Console.WriteLine("round up:" + roundUp.ToString("N"));
        Console.WriteLine("round down:" + roundDown.ToString("N"));
        Console.WriteLine("round away from zero:" + awayFromZero.ToString("N"));
    }
}

结果 四舍五入:55.33
向下舍入:55.32
从零开始舍入:55.33

从 dotnetfiddle.net (https://dotnetfiddle.net/TnOaXF) 剪切和粘贴。

我的问题是我正在查看 msdn 中的 double.ToString() 并且无法找出“规则”在哪里确定舍入。 double.toString 如何确定使用从零舍入与舍入到零?任何指向 msdn 或其他权威网站的链接将不胜感激。非常感谢。

【问题讨论】:

  • 旁注:dotnetfiddle 不需要登录,只需点击“分享”。无论哪种方式,最好将代码粘贴到此处,以防 dotnetfiddle 破产而我们只剩下断开的链接。
  • @dcastro 非常感谢。我正在点击保存并假设这也会给我一个网址
  • 假设decimal使用与double相同的方法进行四舍五入,发现这个answer

标签: .net


【解决方案1】:

来自Standard Numeric Format strings 文档,它总是远离零:

要执行舍入运算,请使用 Math.Ceiling、Math.Floor 或 Math.Round 方法。

当精度说明符控制结果字符串中的小数位数时,结果字符串反映从零四舍五入的数字(即使用 MidpointRounding.AwayFromZero)。

从该页面和Custom Numeric Format Strings page 看来,似乎没有办法覆盖它:如果您想要其他内容,则必须在格式化之前手动舍入数字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-11
    相关资源
    最近更新 更多