【发布时间】:2018-02-22 14:07:33
【问题描述】:
在我的应用程序中,我有国际化,所以我们有很多方法来处理格式。
其中一个应该接收一个 double 并将其格式化为两位小数并返回一个 double。为此,我们根据所选的文化使用NumberFormatInfo。
问题是我无法让Convert.ToDouble 以我想要的方式与NumberFormatInfo 一起工作。基本上我想知道的是为什么:
using System;
using System.Globalization;
public class Program
{
public static void Main()
{
var myDouble = 9.983743;
var nfi = new NumberFormatInfo() {
NumberDecimalDigits = 2
};
Console.WriteLine("Original value: " + myDouble);
Console.WriteLine("Converted value: " + Convert.ToDouble(myDouble, nfi));
}
}
打印
Original value: 9.983743
Converted value: 9.983743 // Should be 9.98
如果可能的话,我怎样才能只使用NumberFormatInfo 获得我想要的结果。
谢谢,
【问题讨论】:
-
这是因为将
double转换为double不会改变double。您想要格式化double的string表示形式。那或实际上舍入或截断有问题的double。 -
即使
myDouble是string,它仍然不会对数字进行四舍五入。那么基本上Convert.ToDouble方法中NumberFormatInfo参数的作用是什么? -
基本上
NumberFormatInfo既可用于将string解析为数字,也可用于将数字格式化为string。所以它的一些设置仅用于这两种用途之一。 -
在
NumberFormatInfo的参数中,我认为这是少数适用于double的参数之一。其他的实际上只是关于呈现数字(货币符号、加号等)。那是一个婴儿潮一代:/谢谢! -
你看到我的回答了吗?我将向您展示如何将您的数字四舍五入到 2 位数。
标签: c# globalization