【发布时间】:2011-05-18 09:05:46
【问题描述】:
我有一些来自外部服务的十进制数据。我需要将数据格式化为 2 位小数,因为它代表金钱,但如果我使用标准 C 格式,我会将数字四舍五入:
var x = 42.999m;
var y = string.Format("{0:C}", x);
这导致 y 包含 £43.00。我怎样才能把它四舍五入到 42.99 英镑?
(注意this question不一样)
【问题讨论】:
我有一些来自外部服务的十进制数据。我需要将数据格式化为 2 位小数,因为它代表金钱,但如果我使用标准 C 格式,我会将数字四舍五入:
var x = 42.999m;
var y = string.Format("{0:C}", x);
这导致 y 包含 £43.00。我怎样才能把它四舍五入到 42.99 英镑?
(注意this question不一样)
【问题讨论】:
如果您想使用非默认舍入策略,您需要执行以下操作:
var x = 42.999m;
var y = string.Format("{0:C}", Math.Floor(x * 100) / 100);
Math.Floor 向下舍入;但是它不需要小数位数,因此您必须强制使用小数点后 2 位的行为。
【讨论】:
虽然这个问题已经解决了,但我建议你使用
var y = String.Format("{0:c3}",x);
// "{0:C3}" is for -123.456 ("C3", en-US) -> ($123.456)
【讨论】: