我正在使用我的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; 用户可能会键入不是数字的内容,然后您将获得异常.
语言不会隐式执行转换,因为它会导致精度损失.但是,您可以使用强制转换显式执行转换:
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类型作为结果.
| 归档时间: |
|
| 查看次数: |
921 次 |
| 最近记录: |