【问题标题】:Money format using float in c# [duplicate]在c#中使用浮点数的货币格式[重复]
【发布时间】:2020-02-18 10:53:03
【问题描述】:

所以我将使用 realmdb 创建一个应用程序 - 领域目前还不支持十进制数据类型,所以我一直在寻找一个等价物。如果你可以想象对象 1 返回 50,对象 2 返回 50,对象 3 返回 12 = 112,但在 30% 之后它应该返回 78.40 英镑 - 现在它返回 78.4 英镑

下面是我当前的代码。

        Console.WriteLine("Object Costs");
        float ObjectOne = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("Object 2 Costs");
        float ObjectTwo = Convert.ToInt32(Console.ReadLine());

        Console.WriteLine("Object 3 Costs");
        float ObjectThree = Convert.ToInt32(Console.ReadLine());

        float Total = ObjectOne + ObjectTwo + ObjectThree;


        Console.WriteLine("Total: " + NewLine + "£" + Total);

        Console.WriteLine("DISCOUNTED - 30% OFF!!!");



        Console.WriteLine(NewLine + "Final Total: " + "£" + (Total - Math.Round((Total / 100 * 30), 2, MidpointRounding.AwayFromZero)));

【问题讨论】:

  • 这能回答你的问题吗? How to format string to money
  • 你应该看看 C# 中的字符串格式,例如:yourfloat.ToString("0.00")
  • 如果 realmdb 没有小数,那么我认为最好将其保存为表示美分或其他内容的整数,但将代码保留为小数。对货币使用浮点数会带来很多问题。
  • @Innat3 愚蠢的问题 - 如果它是一个字符串对象,或者我只需要声明我在求和之前将其转换回来,我怎么能在稍后使用该数字进行计算?
  • @BlairGibson 您只需使用.ToString() 将数字显示为所需格式的字符串。您可以继续使用原始浮动进行操作,并在需要再次显示时使用.ToString()

标签: c# realm


【解决方案1】:

您可以使用ToString("0.00") 格式化您的浮点值;

var discountedRate = (Total - Math.Round((Total / 100 * 30), 2, MidpointRounding.AwayFromZero)).ToString("0.00");

Console.WriteLine($"Final Total:£ {discountedRate}");

Try it online


请注意:如果您在处理金钱问题,请使用 decimal 而不是 float

来自 MSDN:

十进制类型的精度更高,范围更小 float 和 double,适用于金融和货币 计算。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-06
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-20
    相关资源
    最近更新 更多