如何在小数点后面添加零

5
假设我有一个这样的十进制数:
decimal a= 12.1

但我希望它是这样的:
a=12.10

不使用.toString()也可以实现吗?我尝试使用decimal.Round(),但仍然会设置a=12.1

澄清: 数据(例如12.1)来自于Web服务,因此不能简单地将其更改为12.10M。


2
据我所知 - 不行。唯一的方法是使用 .toString()。 - Artem Kulikov
1
decimal 类型旨在让您处理数字数据。作为数字,12.10 和 12.1 是完全相同的,因此 decimal 数据类型没有被设计用于区分两者。您需要将其转换为字符串或单独跟踪要显示的小数位数。 - Damien_The_Unbeliever
@Damien_The_Unbeliever 实际上,“decimal”类型确实包含此信息。 szpic 代码的问题在于他没有使用十进制文字 - 当双精度值“12.10”转换为十进制时,零会丢失。使用“12.10M”就可以正常工作 :) - Luaan
我在我的问题中进行了小的澄清,解释为什么我有12.1而不是字面上的12.10。 - szpic
你不应该关心十进制数是否有.0,你只需要关心它的字符串表示。 - Sayse
@szpic 这也在我的答案中处理了 - 只需四舍五入到所需的数字并乘以 1.00M 即可。 - Luaan
1个回答

17
实际上,.NET的decimal类型包括小数点后的零。您只需要使用十进制文字即可:
var a = 12.10M;

如果你需要的是实时值而不是编译时值,你可以与另一个十进制字面量相乘,例如:

var a = someDecimalInput;
return a * 1.0000M; // Ensures at least four digits after the decimal point.

然而,我仍然建议不要这样做 - 格式化最好留给表示层处理,那里您可以处理要显示多少位小数。通常会使用类似 a.ToString("f2") 的东西。


decimal.ToString的实现:返回Number.FormatDecimal(this, null, NumberFormatInfo.CurrentInfo),这是调试器用来显示十进制值的。 - Serve Laurijssen
@ServéLaurijssen 是的,那是我所期望的 - 看起来调试器实际上没有使用ToString来表示小数,因为a.ToString() 显示了零,而调试器显然没有。没关系,调试器可以随便做什么,而且无论如何都有方法来修改输出,而不管 ToString 的实现:D - Luaan
当然,decimal.ToString()的实现不能调用decimal.ToString() :) - Serve Laurijssen

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