是否可以将两位小数分配给双精度
Posted
技术标签:
【中文标题】是否可以将两位小数分配给双精度【英文标题】: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
。
【参考方案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
。以上是关于是否可以将两位小数分配给双精度的主要内容,如果未能解决你的问题,请参考以下文章
java,中双精度double控制保留两位小数,js控制两位小数