【问题标题】:is it possible to assign two decimal places to a double是否可以将两位小数分配给双精度
【发布时间】:2020-05-21 19:54:14
【问题描述】:

我在网上查看并找到了多个示例,这些示例向您展示了如何将 2 个小数位添加到双精度。但是,我发现的所有示例都要求您将双精度更改为字符串格式。比如

c# double to string

formatting a double to two decimal places

是否可以指定两位小数并保留为双精度位?

例如双(25,2)

public double balance {get;set}

double money=145

balance=money 

所以余额现在应该是145.00

余额应该保持双倍(25,2)

【问题讨论】:

  • 没有。双精度定义为 8 字节浮点数。它没有定义的精度。有关更多信息,请参阅Difference between decimal, float and double in .NET?
  • 写一个struct 并不难,它有两个整数表示整数部分和小数部分。如果小数部分超过 100,则将 f / 100 添加到整个部分,并将 f % 100 分配给小数部分
  • 使用decimal 而不是double

标签: c#


【解决方案1】:

没有。处理该问题的最佳方法是尽可能长时间地使用数字类型,然后仅在最后可能的时刻转换为字符串,然后再将值显示给用户。

此外,每当您使用金钱时,您应该更喜欢decimal 类型而不是double。这仍然不会让您保留两位小数 - 这不是数字类型的工作方式! - 但它会帮助您避免在处理金钱时真正重要的舍入错误。

最后,如果这是您的财产:

public decimal Balance {get;set;}

您可以拥有一个看起来像这样的附加属性

public string BalanceString {get {return Balance.ToString("F2");} }

请注意,此属性没有 set,并且取决于数字 Balance 属性。

【讨论】:

  • 我更喜欢这个答案,因为您使用decimal 而不是double
【解决方案2】:

没有。这是不可能的。 .net 数据类型都不是这样的。像 oracle 一样,您可以在其中分配number(10,2)。在 .net 中,您需要将操作与显示分开。无论您的值是什么,您都可以随时对其进行格式化以显示

double money = 145.2345d;
Console.WriteLine(money.ToString("#.00"));

结果:145.23 您还可以使用标准字母格式选项,例如 "C"

Console.WriteLine(money.ToString("C"));

结果:$145.23

【讨论】:

  • Decimal 在涉及金钱或货币时应始终使用,而不是 double
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 2013-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多