十进制 - 截断尾随零

Kon*_*rad 18 c# decimal

我注意到.NET在小数和尾随零时有一些时髦/不直观的行为.

0m == 0.000m //true
0.1m == 0.1000m //true
Run Code Online (Sandbox Code Playgroud)

(0m).ToString() == (0.000m).ToString() //false
(0.1m).ToString() == (0.1000m).ToString() //false
Run Code Online (Sandbox Code Playgroud)

我知道必须遵守ECMA CLI标准.但是我想知道是否有内置的方法来截断十进制值的尾随零而不通过字符串表示(.ToString("G29")和解析后退技巧可行,但既不是快速也不是优雅的解决方案) ?

有任何想法吗?非常感谢.

Tho*_*rna 17

我认为你需要的是这个(我在这里回答的更多细节):

public static decimal Normalize(decimal value)
{
    return value/1.000000000000000000000000000000000m;
}
Run Code Online (Sandbox Code Playgroud)


Ray*_*Ray 7

使用格式字符串指定ToString()的输出:

(0.1m).ToString("0.#") -> "0.1"
(0.10000m).ToString("0.#") -> "0.1"
Run Code Online (Sandbox Code Playgroud)

在格式中使用"0"指定数字或非指数0,使用"#"指定有效数字或抑制非有效数字0.

编辑:我在这里假设您担心数字的视觉(字符串)表示 - 如果没有,我将删除我的答案.