操作符*不能应用于十进制数和双精度浮点数 c#

3

我目前正在制作一个税收程序(学习项目),它可以读取CSV文件并生成人员和账户余额列表。我需要从一个文本框中向下舍入2个小数位,并在另一个文本框中将它们相加。我的代码附在下面,告诉我不能使用“*”,那么如何用0.1乘以一个小数?如果我做错了,请让我知道,谢谢!

public partial class Form1 : Form
{
    //CSV ARRAY LISTS
    List<string> fullName = new List<string>();
    List<string> accBalance = new List<string>();

    int currentItem;
    int index;
    int counter = 0;

    decimal interestBalance = 0;
    decimal result;

    decimal interestRemainder = 0;
    double round = 0.1;


 private void interestBalanceBox_TextChanged(object sender, EventArgs e)
    {
        interestRemainder = decimal.Parse(interestBalanceBox.Text);
        interestRemainder = Math.Truncate(0.1 * interestRemainder) / 100;
        interestRemainderBox.Text = interestRemainder.ToString();

    }

我们需要代表的程序是这个!非常感谢您的帮助。

在此输入图片描述


2
决定是否使用decimal数学或double数学。 decimal * decimal => decimal是明确定义的,就像double * double => double一样。因此,当您决定要使用哪种类型时:强制转换为正确的类型并使用它。通常涉及财务的任何事情都是decimal。如果问题只是0.1,则可以通过乘以0.1M或仅除以10来解决。 - Marc Gravell
1个回答

7
interestRemainder = Math.Truncate((decimal)0.1 * interestRemainder) / 100;

你需要将0.1转换为与另外一个运算数相同的类型。

啊哈,感谢你,现在好了:D我会记住这个方法的,下次再需要的时候用得着!干杯! - Getwrong
3
"0.1M" 可能比 "(decimal)0.1" 更简单。 - Marc Gravell
好的,OP声明了一个名为round的变量,他们应该在你的示例中使用该变量作为被转换为十进制的值,而不是0.1的值。但是你的答案是正确的。或者使用roundM +1得到正确的答案。 - MethodMan
@MarcGravell 0.1M 会是重复的... 我不确定为什么还要为完全相同的错误信息创建许多帖子,所以这可能不是一个好主意。 - Alexei Levenkov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接