我必须使用以下规则将double转换为字符串:
如果小数点位置为-1(或另一个不存在的值,意为“自动”),则应输出所有有效数字的小数部分(应修剪末尾的全部零)。如果double是整数,则其小数部分根本不应输出。例如,digits = -1:1029.0 - > 1,029,1029.123456789 - > 1,029.123456789。
如果小数点位置等于或大于0,则应使用给定的位数输出数字的小数部分。例如,digits = 2:1029.0 - > 1,029.00,1029.123456789 - > 1,029.12。
转换应该取决于文化(点或逗号作为小数点,逗号或空格作为组分隔符等)。
我有一个任务代码:
var _Culture = CultureInfo.CreateSpecificCulture("en-US");
object sourceValue = 1029.0;//.123456789;
int digits = -1; // 2;
var formatter = "G";
if (digits != -1)
{
_Culture.NumberFormat.NumberDecimalDigits = digits;
formatter = "N";
}
var sourceValueAsFloat = (double)sourceValue;
var s = sourceValueAsFloat.ToString(formatter, _Culture);
是否有其他格式化程序(不是“N”或“G”),我可以使用吗?或者,也许,我可以用另一种方式使用“N”/“G”?
此致
答案 0 :(得分:0)
答案 1 :(得分:0)
// preferably make allDigits a static field to avoid re-allocating on every call
string allDigits = "#,0." + new string('#', 350);
string output = sourceValue.ToString(
digits < 0 ? allDigits : "#,0." + new string('0', digits));
如果你需要明确处理不同的文化:
string output = sourceValue.ToString(
digits < 0 ? allDigits : "#,0." + new string('0', digits),
culture);