是否可以将两位小数分配给双精度

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控制两位小数

如何将双精度值格式化为点后两位小数且分隔符为千位的字符串?

在Java中将双精度格式设置为两位小数会产生逗号而不是点[重复]

单精度小数点后面有几位?

单精度小数点后面有几位?

在 C语言中 双精度和单精度的数,小数点后面分别保留几位啊·······