gpt4 book ai didi

c# - 将数字截断到指定的小数位

转载 作者:太空狗 更新时间:2023-10-29 17:48:14 25 4
gpt4 key购买 nike

我需要将一个数字截断到小数点后两位,这基本上意味着砍掉多余的数字。

例如:

2.919     ->      2.91

2.91111 -> 2.91

为什么?这就是 SQL Server 在存储大量 a 时所做的事情。特别精确。例如,如果列是 Decimal(8,2),并且您尝试插入/更新数字 9.1234,3 和 4 将被切掉。

我需要在 C# 代码中做完全相同的事情。

我能想到的唯一可能的方法是:

  1. 使用 stringformatter 仅将其“打印”出来两位小数,然后转换成小数, 例如:

      decimal tooManyDigits = 2.1345

    decimal ShorterDigits = Convert.ToDecimal(tooManyDigits.ToString("0.##"));

    // ShorterDigits is now 2.13

    我对此不满意,因为它涉及到一个 to-string 然后另一个字符串到十进制的转换,这看起来有点疯狂。

  2. 使用 Math.Truncate(只接受整数),所以我可以乘以 100,截断它,然后除以 100。例如:

    decimal tooLongDecimal = 2.1235;

    tooLongDecimal = Math.Truncate(tooLongDecimal * 100) / 100;

    我对此也不满意,因为如果 tooLongDecimal 为 0,我将得到除以 0 的错误。

肯定有更好更简单的方法!有什么建议吗?

最佳答案

你自己已经回答了这个问题;看来您只是误解了除以零的含义。正确的做法是乘法、截断法、除法,如下所示:

decimal TruncateTo100ths(decimal d)
{
return Math.Truncate(d* 100) / 100;
}

TruncateTo100ths(0m); // 0
TruncateTo100ths(2.919m); // 2.91
TruncateTo100ths(2.91111m); // 2.91
TruncateTo100ths(2.1345m); // 2.13

这里没有除以零,只有除以 100,这是绝对安全的。

关于c# - 将数字截断到指定的小数位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17644365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com