小数值应为 0.0x 时却为零

发布于 2024-08-25 09:39:21 字数 325 浏览 3 评论 0原文

如果之前讨论过这个问题,我很抱歉,我很难找到这个问题。

我正在计算折旧率。我们计算的一部分是 1/寿命(以月为单位)。我的表将此数据存储在十进制字段中。我尝试了 test = 1 /estimatedLife;test 的计算结果(定义为 decimal)为 0

。预计寿命为36个月。所以 1/36 应等于 0.02777778。

对我做错了什么有什么想法吗?

顺便说一句,我将 test 更改为 double 并得到了相同的结果。

If this was previously talked about, I'm sorry, I had a hard time searching on this.

I am calculating a depreciation rate. One portion of our calculation is 1/life in months. My table stores this data in a decimal field. I tried test = 1 / estimatedLife; but the result of the calculation of test (which is defined as a decimal) is 0.

Say the estimated life is 36 months. So 1/36 should equal 0.02777778.

Any thoughts of what I am doing wrong?

BTW, I changed the test to a double and had the same result.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

浅忆流年 2024-09-01 09:39:21

另一个内置替代方案是 Decimal.Divide

test = Decimal.Divide(1, estimatedLife);

还有更多要写的,但我想说得相当明确。

Another built-in alternative is Decimal.Divide:

test = Decimal.Divide(1, estimatedLife);

More to write, but pretty explicit I'd say.

雨的味道风的声音 2024-09-01 09:39:21

尝试:

test = 1.0M / estimatedLife;

try:

test = 1.0M / estimatedLife;
暖伴 2024-09-01 09:39:21

您的代码将两个整数相除,然后将结果(也是一个整数)分配给一个 decimal 变量。

您需要通过将至少一个操作数设为十进制来切换到十进制除法,如下所示:1.0M /estimatedLife

Your code divides two integers, then assigns the result (which is also an integer) to a decimal variable.

You need to switch to decimal division by making at least one of the operands a decimal, like this: 1.0M / estimatedLife.

留蓝 2024-09-01 09:39:21

estimatedLife 是一个 int,不是吗?试试这个:

    decimal test = 1 / (decimal) estimatedLife;

或者使用 SwDevMan81 的建议:

    test = 1.0M / estimatedLife;

问题是整数除法会丢弃小数点后的所有内容。其中一个参数必须是小数才能得到您想要的结果。

他在评论中发布的文档链接说:

如果您希望将数字实数文字视为十进制,请使用后缀 m 或 M

因此 1.0M 表示“值为 1.0 的十进制类型的文字”

estimatedLife is an int, isn't it. Try this:

    decimal test = 1 / (decimal) estimatedLife;

or use SwDevMan81's suggestion:

    test = 1.0M / estimatedLife;

The issue is that integer division throws away everything after the decimal point. One of the arguments has to be a decimal for you to get the result you want.

The documentation link that he posted in a comment says:

If you want a numeric real literal to be treated as decimal, use the suffix m or M

so 1.0M means "a literal of type decimal with the value 1.0"

失去的东西太少 2024-09-01 09:39:21

只是补充一下,如果您需要特定的精度(我注意到您的输出设置为小数点后 8 位),您可以使用

decimal test = Math.Round(1M / estimatedLife,8);

just to add, if you require a specific precision (I noticed your output was set to 8 decimal places) you can use

decimal test = Math.Round(1M / estimatedLife,8);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文