在 c# 控制台中用 double 显示十进制数

displaying a decimal number in c# console with double

你好,这是我的代码

    double d = 8.0;
    b = Convert.ToDouble(Console.ReadLine());
    Console.WriteLine(d+b);

样本input/output

  1. 输入 8 /输出 16

  2. 输入 8,0 /输出 16

  3. 输入 8.0 /输出 88

如何在情况 1 和情况 2 中输出 16.0? 第二个问题,我如何告诉 c# 8.0 是 8 而不是 80?

我能做到

    double value=d+b;
    Console.WriteLine(value.ToString(CultureInfo.CreateSpecificCulture("en-GB")));

但这并没有改变 8.0 被解释为 80, 它也不会改变 16

的显示

我的问题是如何在数字实际上不是小数的任何时候显示 .0 或 ,0。

问题 1

您需要:

  1. 将所有逗号替换为句点以将小数点分隔符规范化为“.”。
  2. 您需要将 IFormatProvider 传递给您对 ToDouble 的调用,以控制它如何解析号码。传递 CultureInfo.InvariantCulture 就足够了,因为它处理“.”。作为小数分隔符。

问题二

正如@jdweng 所说,您需要使用格式字符串来控制输出。 $"{result:0.00}" 表达式是这里的神奇之处:这是一个 interpolated string,它基本上获取存储在 result 中的任何内容,并将 0:00 格式字符串应用于它,这限制了输出到小数点后两位。

class Program
{
    static void Main(string[] args)
    {
        var d = 8.0D;
        var userInput = "8,0";
        userInput = userInput.Replace(',', '.');
        var b = Convert.ToDouble(userInput, CultureInfo.InvariantCulture);
        var result = d + b;
        var formattedOutput = $"{result:0.00}";
        Console.WriteLine(formattedOutput);
    }
}