C# 调用方法时出现双精度浮点问题

C# 调用方法时出现双精度浮点问题,c#,methods,parameters,C#,Methods,Parameters,这是我的家庭作业代码。在第10行,我遇到了双浮转换的问题,我不知道为什么它会出现。有小费吗?还有,代码还没有完成 更多信息,它是关于数字29.99,它被声明为float,但我想这里是双格式的 using System; namespace Lab_3 { class BookTest { static void Main(string[] args) { Book book1 = new Book();

这是我的家庭作业代码。在第10行,我遇到了双浮转换的问题,我不知道为什么它会出现。有小费吗?还有,代码还没有完成

更多信息,它是关于数字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;
            }
        }

    }
}
编辑:

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

试试看

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

文本
29.99
double
文本,没有从
double
float
的隐式转换。选项:

  • float
    文本与
    f
    后缀一起使用:29.99
  • 转换为浮动:
    (浮动)29.99
  • 避免对价格使用二进制浮点数,将参数类型更改为
    decimal
    ,并将参数更改为
    29.99m
我强烈建议最后一种方法——价格(以及通常的“人工”值)不适合二进制浮点数。人们倾向于认为十进制值将被精确保留,这意味着它更适合十进制浮点数

我有一些文章,你可能会觉得有用

因此,为了清楚起见,您的构造函数将如下所示(我稍微重命名了参数):

你会这样称呼它:

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

这是毫无疑问的。我投票决定关闭,结果是什么错误?哦,请查看注释以获得一个答案。错误CS1503:Argument
#4'无法将
double'表达式转换为'float'(CS1503)(实验3)类型,错误CS1502:labu 3.Book.Book(string,string,string,float,string)的最佳重载方法匹配项有一些无效参数(CS1502)(实验三)我知道这很简单。谢谢。虽然我被要求使用浮点,但在这种情况下,29.99f是必须的。关于如何处理十进制的提示也非常有用。同意。不要使用浮点来存储货币。当四舍五入时,你会损失便士。@HelpNeeder:是的,这些人绝对正确。如果你的教授告诉你使用浮点对于金融计算,找一个更好的教授,因为这是危险的错误。浮点数用于物理计算,其中6.0280000001和6.02799999之间的差异是不相关的;这些差异在执行金融计算时是相关的。小数是专为金融计算设计的。好吧,我是这学期的金宁。也许这样的例子只是让我们开始使用C#点。这一点很好理解。我会向教授指出事实,看看他会说些什么。
Book book2 = new Book("Advenced C#", "Joe", "Robertson", 29.99m, "PUC Press");