簡體   English   中英

C#假設浮點文字是double類型?

[英]C# assuming floating point literals are of type double?

我正在使用我的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();
        }
    }
}

它回來說:“不能隱式地將類型'double'轉換為'float'。” 當我試圖將整個myTotal行放在括號中並在末尾添加一個F表示它正在尋找一個';'。

所以我的問題是,我如何使用浮動? 如何在此末尾添加F? 我也試過以不同的方式在它前面鑄造(浮動)。

感謝您的時間。

你這里有一個更大的問題。 您永遠不應將金融數量表示為浮點數或雙精度數 C#有一種專門用於表示金融數量的類型:十進制。

你的代碼應該是

decimal myTotal = 0.00m;
...
myTotal = (quarters * .25m) + (dimes * .10m) + (nickels  * .05m) + (pennies * .01m);  

記住這個的方法:“我是為了錢”。

此外,在我們使用它時,在將用戶輸入轉換為數字時使用TryParse; 用戶可能會鍵入不是數字的內容,然后您將獲得異常。

語言不會隱式執行轉換,因為它會導致精度損失。 但是,您可以使用強制轉換顯式執行轉換:

myTotal = (float)(
              (quarters * .25)
            + (dimes    * .10)
            + (nickels  * .05)
            + (pennies  * .01)
          );

在這種情況下,你知道你沒有處理天文數量或精確的高精度,所以這應該沒問題。

您還可以通過指定浮點文字而不是雙精度來阻止自動將值提升為double:

myTotal = (quarters * .25F)
        + (dimes    * .10F)
        + (nickels  * .05F)
        + (pennies  * .01F);

...對於加法運算, int變量將被提升為float ,因此您將使用float而不是double類型作為結果。

myTotal = (quarters * .25f) + (dimes * .10f) + (nickels  * .05f) + (pennies * .01f);

這應該做到這一點。
將int乘以float => float結果
在您的版本中,int * double(默認值)=> double results => double total。
嘗試將其分配給float var,編譯器抱怨double to float conversion必須是顯式的(精度損失)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM