在逗号后面格式化一到两位数而不向上或向下舍入

Fro*_*xor 2 c# formatting decimal rounding

我一直在寻找,我根本找不到答案,没有一个能正常工作.

我想把像0.33333333333这样的双倍变成0,33或0.6666666666变成0,66

像0.9999999999这样的数字应该变为1.

我试过各种各样的方法

value.ToString("##.##", System.Globalization.CultureInfo.InvariantCulture)
Run Code Online (Sandbox Code Playgroud)

它只是返回垃圾或错误地舍入数字.有什么帮助吗?

基本上每个数字除以9,然后需要显示2个小数位而不进行任何舍入.

我找到了一个很好的函数,似乎适用于高达9.999999999的数字.除此之外,它开始丢失一个十进制数.有一个像200.33333333333的数字,它只显示200而不是200,33.对那些人有什么修复?

这里是:

string Truncate(double value, int precision)
{
    string result = value.ToString();

    int dot = result.IndexOf(',');
    if (dot < 0)
    {
        return result;
    }

    int newLength = dot + precision + 1;

    if (newLength == dot + 1)
    {
        newLength--;
    }

    if (newLength > result.Length)
    {
        newLength = result.Length;
    }

    return result.Substring(0, newLength);
}
Run Code Online (Sandbox Code Playgroud)

Tre*_*vor 8

你有没有尝试过

Math.Round(0.33333333333, 2);
Run Code Online (Sandbox Code Playgroud)

*更新

如果你不想要小数舍入另一件事,你可以做的是将double改为字符串,然后得到一个子串到两个小数位并将其转换回double.

doubleString = double.toString();
if(doubleString.IndexOf(',') > -1)
{
   doubleString = doubleString.Substring(0,doubleString.IndexOf(',')+3);
}
double = Convert.ToDouble(doubleString);
Run Code Online (Sandbox Code Playgroud)

您可以使用if语句检查.99并将其更改为1.


Rob*_*vey 5

Math.Truncate(value * 100)/100
Run Code Online (Sandbox Code Playgroud)

虽然我不保证除法将如何影响浮点数。十进制数通常不能以浮点形式精确表示,因为它们以 2 为基数存储,而不是以 10 为基数存储,因此如果要保证可靠性,请使用 adecimal而不是 a double