Double to Float调用方法时出现问题

时间:2011-09-12 21:32:48

标签: c# methods parameters

这是我的作业代码。在第10行,我遇到了双浮动转换的问题,我不确定它为什么会到位。有什么提示吗? PS。代码尚未完成。

更多信息,它是关于编号29.99,它被声明为float,但我认为这是双重形式。

using System;

namespace Lab_3
{
    class BookTest
    {
        static void Main(string[] args)
        {
            Book book1 = new Book();
            Book book2 = new Book("Advenced C#", "Joe", "Robertson", 29.99, "PUC Press");
        }
    }

    public class Book
    {
        string authorFirstName;
        string authorLastName;
        float price;
        string publisherName;
        string title;

        public Book()
        {
        }

        public Book(string bookTitle, string firstName, string lastName, float bookPrice, string publisher)
        {
            authorFirstName = firstName;
            authorLastName = lastName;
            price = bookPrice;
            publisherName = publisher;
            title = bookTitle;
        }

        public void display()
        {
        }

        public string getAuthorName()
        {
            return 0;
        }

        public string AuthorFirstName
        {
            get
            {
                return authorFirstName;
            }
            set
            {
                authorFirstName = value;
            }
        }
        public string AuthorLastName
        {
            get
            {
                return authorLastName;
            }
            set
            {
                authorLastName = value;
            }
        }
        public float Price
        {
            set
            {
                price = value;
            }
        }
        public string PublisherName
        {
            set
            {
                publisherName = value;
            }
        }
        public string Title
        {
            set
            {
                title = value;
            }
        }

    }
}

编辑:

感谢您的帮助!问题解决了,解释帮助我解决了一些问题。

2 个答案:

答案 0 :(得分:7)

文字29.99double字面值,并且没有从doublefloat的隐式转换。选项:

  • 使用带有float后缀的f字面值:29.99
  • 施放到浮动:(float) 29.99
  • 避免使用二进制浮点数作为价格,将参数类型更改为decimal,将参数更改为29.99m

我强烈建议最后一种方法 - 价格(以及一般的“人为”值)非常适合二进制浮点数。人们倾向于认为 decimal 值将被精确保留,这意味着它更适合十进制浮点数。

我有关于binary floating point numbersdecimal floating point numbers的文章,您可能会觉得这些文章很有用。

所以,为了清楚起见,你的构造函数看起来像这样(我稍微重命名了参数):

public Book(string title, string authorFirstName, string authorLastName,
            decimal price, string publisher)

你会这样称呼它:

Book book2 = new Book("Advenced C#", "Joe", "Robertson", 29.99m, "PUC Press");

答案 1 :(得分:2)

尝试

Book book2 = new Book("Advenced C#", "Joe", "Robertson", 29.99f, "PUC Press");