十进制 ToString 格式,至少给出 1 位数字,没有上限

发布于 2024-12-16 22:40:46 字数 164 浏览 2 评论 0原文

如何在 C# 中格式化小数点后至少一位数字,但如果小数点后指定多于 1 位数字则没有固定上限:

5 -> "5.0"
5.1 -> "5.1"
5.122 -> "5.122"
10.235544545 -> "10.235544545"

How to format a decimal in C# with at least one digit after the decimal point, but not a fixed upper limit if specified more than 1 digit after the decimal point:

5 -> "5.0"
5.1 -> "5.1"
5.122 -> "5.122"
10.235544545 -> "10.235544545"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

格子衫的從容 2024-12-23 22:40:46

使用 ToString("0.0########### ################")

一些注意事项:,

  • 其中有 27 个 #,如 十进制结构最多可容纳 28 位小数的精度。
  • 0 自定义说明符 将导致始终显示的数字,即使值为 0。
  • # 自定义说明符 仅在数字为零且该数字右侧/左侧的所有数字(取决于小数点的哪一侧)时才显示值你所在的点)为零。
  • 您需要在小数点右侧第一个 0 之后插入尽可能多的 #,以容纳要传递给 ToString< 的所有值的长度/code>,如果您只精确到 10 位小数,那么您需要 9 个 # (因为右侧的第一个小数位由 0 处理

)更多信息,请参阅MSDN 标题为“自定义数字格式字符串”

Use ToString("0.0###########################").

Some notes:,

  • There are 27 #s in there, as the decimal structure can accommodate precision up to 28 decimal places.
  • The 0 custom specifier will cause a digit to always be displayed, even if the value is 0.
  • The # custom specifier only displays a value if the digit is zero and all of the digits to the right/left of that digit (depending on what side of the decimal point you are on) are zero.
  • You will need to insert as many # after the first 0 to the right of the decimal point to accommodate the length of all the values you will pass to ToString, if you will only have precision to 10 decimal places, then you need nine # (since you have the first decimal place to the right handled by 0)

For more information, see the section of MSDN titled "Custom Numeric Format Strings".

病女 2024-12-23 22:40:46
[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        var a = 5m;
        var b = 5.1m;
        var c = 5.122m;
        var d = 10.235544545m;

        var ar = DecToStr.Work(a);
        var br = DecToStr.Work(b);
        var cr = DecToStr.Work(c);
        var dr = DecToStr.Work(d);

        Assert.AreEqual(ar, "5.0");
        Assert.AreEqual(br, "5.1");
        Assert.AreEqual(cr, "5.122");
        Assert.AreEqual(dr, "10.235544545");
    }
}

public class DecToStr
{
    public static string Work(decimal val)
    {
        if (val * 10 % 10 == 0)
            return val.ToString("0.0");
        else
            return val.ToString();
    }
}
[TestClass]
public class UnitTest1
{
    [TestMethod]
    public void TestMethod1()
    {
        var a = 5m;
        var b = 5.1m;
        var c = 5.122m;
        var d = 10.235544545m;

        var ar = DecToStr.Work(a);
        var br = DecToStr.Work(b);
        var cr = DecToStr.Work(c);
        var dr = DecToStr.Work(d);

        Assert.AreEqual(ar, "5.0");
        Assert.AreEqual(br, "5.1");
        Assert.AreEqual(cr, "5.122");
        Assert.AreEqual(dr, "10.235544545");
    }
}

public class DecToStr
{
    public static string Work(decimal val)
    {
        if (val * 10 % 10 == 0)
            return val.ToString("0.0");
        else
            return val.ToString();
    }
}
送你一个梦 2024-12-23 22:40:46
Func<decimal, string> FormatDecimal = d => (
    d.ToString().Length <= 3 || 
    !d.ToString().Contains(".")) ? d.ToString("#.0") : d.ToString()
);
Func<decimal, string> FormatDecimal = d => (
    d.ToString().Length <= 3 || 
    !d.ToString().Contains(".")) ? d.ToString("#.0") : d.ToString()
);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文