0

我有一个Double值,需要找到格式字符串,它将这个值转换为双精度值有多少小数,以及千位分隔符。

例如,假设我的值为 1000000.1256。如果我不使用任何格式字符串,则默认字符串具有完整的小数(四位),但没有千位分隔符 ( 1000000.1256)。如果我使用标准格式字符串“N”,则输出为1,000,000.13,即默认使用 2 位小数并进行四舍五入。但我不希望它执行任何舍入,我想显示1,000,000.1256. 请注意,我不知道这个数字有多少个小数,这就是为什么我说我想显示“完整”小数,而不是 2、4 或任何其他更大的小数。我知道我可以使用自定义字符串来做到这一点:“#,#.##########”,因此它最多显示 10 位小数,而且我的数字不太可能超过 10 位小数。但这是唯一/最好的方法吗?

4

2 回答 2

3

“全小数”的概念是荒谬的。10.0 / 3.0 有多少个完整的小数?有无数个数字是有理的,但不是“完美的”。计算机会使情况变得更糟,它用两根手指而不是十根手指进行数学运算,将 0.1 之类的值转换为具有无限位数的数字。

为了人类的利益,您正在将数字转换为字符串。人类对具有无限位数的字符串不感兴趣,他们倾向于在 7 之后调出。当变量为double类型时显示超过 15永远不会有用,超过 15 的任何数字都是随机噪声。计算机无法存储无限位数的不可避免的副作用。

首先创建一个可用的用户界面。如果您不知道什么被认为是“可用的”,那么您必须询问您的客户。他们在金融行业确实有这方面的规定,你不能自己编造。

于 2014-07-11T11:56:27.773 回答
0

我相信你可能需要做额外的字符串操作。这可能不是一种优雅的方式,但我仍然认为它可以满足您的需求。

        double number = 1000000.1256;

        string numberStr = number.ToString();
        string[] arr = numberStr.Split(',');//my cultureInfo is Turkish so I used ','

        string result = Int64.Parse(arr[0]).ToString("0,00", System.Globalization.CultureInfo.InvariantCulture) + "." + arr[1];

结果:1,000,000.1256

于 2014-07-11T11:16:40.933 回答