如果小数位为 .00,则需要忽略字符串中的小数位

Posted

技术标签:

【中文标题】如果小数位为 .00,则需要忽略字符串中的小数位【英文标题】:need to ignore decimal places from string if decimal places is .00 【发布时间】:2018-09-18 11:20:41 【问题描述】:

大家好,我想忽略这个来自字符串编号的.00。以下是我的示例输入和需要输出。我已经尝试过这段代码。 String.Format ("0: n", Amount) 但这段代码有问题。

如果值为10000. 00。 我的代码会将其转换为"10, 000.00" 但我只需要"10, 000"

请帮我解决问题。

更多示例:

10000.00  -> "10,000"
10000.12  -> "10,000.12"
10000.1   -> "10,000.10"

【问题讨论】:

10000.1小数点后一个位应该输出什么? @DmitryBychenko 我需要这个 10000.1 所以它将是 10000.10 我明白了;看来您必须在格式之间切换,这是实际问题 【参考方案1】:

使用这种格式String.Format ("0:0.##", Amount)

或使用千位分隔符:"0:#,0.##" by @Dmitry Bychenko

【讨论】:

千(组)分隔符:"0:#,0.##" 我也需要这个 10000.1 所以它将是 10000.10【参考方案2】:

所以你有某种 money:当且仅当我们有它们时,我们才会输出 cents

  10000.00  -> 10,000    (no cents; exactly 10000)
  10000.003 -> 10,000    (no cents; still exactly 10000) 
  10000.1   -> 10,000.10 (ten cents)
  10000.12  -> 10,000.12 (twelve cents)
  10000.123 -> 10,000.12 (still twelve cents)

我们可以格式化为"#,0.00" 的最后三种情况,而使用"#,0" 格式字符串的前两种情况是正确的。唯一的问题是区分这些情况。

我们可以尝试为此使用Math.Round()

  string result = d.ToString(Math.Round(d) != Math.Round(d, 2) ? "#,0.00" : "#,0");

演示:

decimal[] tests = new decimal[] 
  10000.00m,
  10000.003m,
  10000.10m,
  10000.12m,
  10000.123m,
;

string report = string.Join(Environment.NewLine, tests
  .Select(d => 
     $"d,-10 -> d.ToString(Math.Round(d) != Math.Round(d, 2) ? "#,0.00" : "#,0")"));

Console.Write(report);

结果:

10000.00   -> 10,000
10000.003  -> 10,000
10000.10   -> 10,000.10
10000.12   -> 10,000.12
10000.123  -> 10,000.12

【讨论】:

【参考方案3】:

转换为整数将删除小数位,N2 格式将用作千位分隔符。

([int]10000.00).ToString("N");

【讨论】:

【参考方案4】:

你可以添加另一个扩展

        var Amount = "1000.00";
        var r = String.Format("0: n", Amount).Replace(".00", "");

【讨论】:

以上是关于如果小数位为 .00,则需要忽略字符串中的小数位的主要内容,如果未能解决你的问题,请参考以下文章

一个 If 语句,用于查找数字字段是不是留空或有太多小数位,但如果小数位只有零则忽略

c语言 怎样使计算是整数输出整数是小数输出两位小数

添加逗号时如何更新此 jQuery 插件/正则表达式以忽略小数?

python判断字符串是否是数字的算法

将十进制值格式化为具有 2 个小数位的货币 [重复]

求一时间的正则表达式: 如09:43:09-9:43:10,12:00:01-13:01:34