在c#控制台中以双精度显示十进制数

问题描述 投票:0回答:1

你好,这是我的代码

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

样本输入/输出

  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。

c# console double decimal
1个回答
0
投票

问题1

您需要:

  1. 用句号替换所有逗号,以将小数点分隔符标准化为“。”。
  2. 您需要将IFormatProvider传递给对ToDouble的呼叫,以控制其解析数字的方式。传递CultureInfo.InvariantCulture就足够了,因为它会处理“。”。作为小数点分隔符。

问题2

如@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);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.