当前位置: 首页 > 知识库问答 >
问题:

如何在.NET中将double值转换为具有固定小数位数的decimal类型的值

国跃
2023-03-14

在.NET中,我在一个双变量中有一个值,我需要将它转换为具有指定小数位数的小数,并根据需要进行舍入。我要找的答案应该有一个类似这样的原型:

我所能想到的最好的方法是将double转换为具有正确小数位数的字符串,然后将其解析回小数:

return decimal.Parse(
    double.ToString("0." + new string(numberOfDecimalPlaces,'0'))
);

我更喜欢一种不涉及到字符串转换的方法,因为这看起来很低效。

共有1个答案

鲁烨
2023-03-14
decimal DoubleToDecimal(double value, int numberOfDecimalPlaces){
    return Math.Round((decimal)value, numberOfDecimalPlaces);
}

如果需要保留尾随的零,请尝试使用以下命令:

Math.Round((decimal)value,numberOfDecimalPlaces)+(0M*((decimal)Math.Pow(10,-numberOfDecimalPlaces)))

参见:

> Math.Round(dd,20)
3.2222222
> (0M*((decimal)Math.Pow(10,-20)))
0.00000000000000000000
> Math.Round(dd,20)+(0M*((decimal)Math.Pow(10,-20)))
3.22222220000000000000
 类似资料:
  • 我不知道如何将类型的值转换为预期的参数类型,用于在以下代码中: 如何为编写

  • 我遇到了奇怪的问题时,铸造小数到双倍。 以下代码返回true: 但是,当我将其强制转换为双倍时,它返回false: 这是记录在案的行为吗?当我被迫将decimal转换为Double时,我如何避免它? Visual Studio的截图: 将Math.round铸造为双倍me,结果如下: null 不幸的是,我不能在较小的项目中重现这个问题。我想埃里克的回答解释了原因。

  • 问题内容: 我已经将包含字符串值(例如吃)和浮动值(例如0.87)的CSV文件导入到phpMyAdmin数据库的表中。获得所有字符串值并仅保留具有十进制值的行后,需要将此类值从VARCHAR转换为DECIMAL / FLOAT,以便可以对该属性执行MAX()。 我该怎么做呢?每次我尝试通过phpMyAdmin中的GUI进行此操作时,我所有的值都会自动四舍五入为0和1s。 请帮我! 问题答案: 我认

  • 我创建了一个程序,其中包含一个ArrayList,其中包含学生成绩的单独“双”值。然而,本课程要求创建一个分数整数数组,而不是我之前使用的单独值。 我的学生类代码(我已经删除了不相关的代码,开门见山): 名册等级: 我已经将分隔的值(Grade1、Grade2、Grade3)更改为“int[]Grades”数组,修改了构造函数,并添加了setter和getter。所以,我认为学生班很好,然而花名册

  • 问题内容: 我正在尝试将固定大小的数组转换为可变大小的数组(切片): 但是编译器抛出错误: 我应该如何转换? 问题答案: 使用让您在阵列上切片。另请参阅此博客文章,以获取有关数组和切片的更多信息。

  • 问题内容: 如何在PHP中将数组中的所有值转换为小写? 像什么? 问题答案: 用途: 如果需要 小写嵌套数组 由YahyaUddin编写: