.NET双格式字符串:如何获得完整小数以及千位分隔符?

时间:2014-07-11 09:15:04

标签: .net string format-string

我有一个Double值,需要找到格式字符串,它会将此值转换为double值所具有的小数,以及千位分隔符。

例如,我们说我的价值是1000000.1256。如果我不使用任何格式字符串,则默认字符串具有完整小数(四位数)但不具有千位分隔符(1000000.1256)。如果我使用标准格式字符串" N",则输出为1,000,000.13,即默认情况下使用2位小数并进行舍入。但我不希望它执行任何舍入,我想显示1,000,000.1256。请注意,我不知道这个数字有多少小数,这就是为什么我说要显示" full"小数,而不是2,或4,或任何其他更大的小数。我知道我可以用自定义字符串这样做:"#,#。##########"所以它最多显示10位小数,我的数字不可能超过10位小数。但这是唯一/最好的方式吗?

2 个答案:

答案 0 :(得分:3)

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

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

首先创建可用的用户界面。如果您不知道什么是“可用”,那么您必须询问您的客户。他们有关于金融行业的规则,你不能自己组成。

答案 1 :(得分: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