C#假设浮点文字是double类型?

Str*_*gos 4 c#

我正在使用我的C#教科书,它说"C#假定所有浮点文字都是double类型." 我得到了这个说法,但我不太确定如何将修复程序应用于我正在处理的示例程序.

using System;
using System.Collections.Generic;
using System.Text;

namespace CoinCounter
{
    class Program
    {
        static void Main(string[] args)
        {
            int quarters;
            int dimes;
            int nickels;
            int pennies;
            float myTotal = 0F;

            Console.Out.WriteLine("How many quarters are in the jar?");
            quarters = int.Parse(Console.In.ReadLine());

            Console.Out.WriteLine("How many dimes are in the jar?");
            dimes = int.Parse(Console.In.ReadLine());

            Console.Out.WriteLine("How many nickels are in the jar?");
            nickels = int.Parse(Console.In.ReadLine());

            Console.Out.WriteLine("How many pennies are in the jar?");
            pennies = int.Parse(Console.In.ReadLine());

            myTotal = (quarters * .25) + (dimes * .10) + (nickels  * .05) + (pennies * .01);
            Console.Out.Write("\nTotal: " + myTotal.ToString("c"));

            Console.In.ReadLine();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它回来说:"不能隐式地将类型'double'转换为'float'." 当我试图将整个myTotal行放在括号中并在末尾添加一个F表示它正在寻找一个';'.

所以我的问题是,我如何使用浮动?如何在此末尾添加F?我也试过以不同的方式在它前面铸造(浮动).

感谢您的时间.

Eri*_*ert 11

你这里有一个更大的问题.您永远不应将金融数量表示为浮点数或双精度数.C#有一种专门用于表示金融数量的类型:十进制.

你的代码应该是

decimal myTotal = 0.00m;
...
myTotal = (quarters * .25m) + (dimes * .10m) + (nickels  * .05m) + (pennies * .01m);  
Run Code Online (Sandbox Code Playgroud)

记住这个的方法:"我是为了钱".

此外,在我们使用它时,在将用户输入转换为数字时使用TryParse; 用户可能会键入不是数字的内容,然后您将获得异常.


Sco*_*ith 7

语言不会隐式执行转换,因为它会导致精度损失.但是,您可以使用强制转换显式执行转换:

myTotal = (float)(
              (quarters * .25)
            + (dimes    * .10)
            + (nickels  * .05)
            + (pennies  * .01)
          );
Run Code Online (Sandbox Code Playgroud)

在这种情况下,你知道你没有处理天文数量或精确的高精度,所以这应该没问题.

您还可以通过指定浮点文字而不是双精度来阻止自动将值提升为double:

myTotal = (quarters * .25F)
        + (dimes    * .10F)
        + (nickels  * .05F)
        + (pennies  * .01F);
Run Code Online (Sandbox Code Playgroud)

... int变量将被提升为float添加操作,因此您将获得一个float而不是double类型作为结果.