c# - Convert.ToDecimal(String.Format ("{0:.##}", doubleAmount)) 不喜欢 0.0

标签 c# .net

这一行有格式问题:

Decimal amount = Convert.ToDecimal(String.Format("{0:.##}", doubleAmount));  

如果 doubleAmount 为 0.0,则会抛出格式异常。我如何处理 0.0?

最佳答案

问题是格式字符串{0:.##}将0格式化为空字符串,但是 空字符串不是 Convert.ToDecimal 的有效参数。为避免可能的 FormatException,您可以使用 {0:0.##} 将 0 格式化为 0

(用户 sasfrog 建议 {0:#.##},但由于这也将 0 格式化为空字符串,因此它不起作用。)

但是,如果您只是想将 Double 值四舍五入到小数点后两位并将结果存储在 Decimal 变量中,那么您应该使用

Decimal amount = Decimal.Round((Decimal)doubleAmount, 2, MidpointRounding.AwayFromZero);

并跳过不必要的字符串格式化和解析开销。

关于c# - Convert.ToDecimal(String.Format ("{0:.##}", doubleAmount)) 不喜欢 0.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19327330/

相关文章:

.net - 有没有办法在 NAnt 中动态加载属性文件?

C# - 从 ZIP 中提取特定目录,保留文件夹结构

c# - Process.Close() 和 Process.Dispose() 有什么区别?

c# - 为什么 Blazor 生命周期方法会执行两次?

c# - .net 处理表单中的图像资源

.net - 使用具有 ThreadStatic 属性的并行扩展。它会泄漏内存吗?

c# - 如何重载是编译时而覆盖是运行时?

c# - TPL 数据流管道在服务内部不断运行

.net - 如何根据 CPU 架构使用正确的非托管 DLL 文件? (32/64 位)

c++ - 罗伯特·吉塞克的非管理导出