2011-01-13 82 views
2
public string s() 
{ 
    double price = 123.12 
    double preVatPrice = (100/(100 + 20) + price); 

    return preVatPrice.ToString(); 
} 

在C#中总是返回为'0'任何想法为什么?向后计算增值税始终返回为0在c#

+0

你试过使用`(100d /(100 + 20))`来强制浮点运算吗? – thecoop 2011-01-13 14:49:25

+3

这个东西没有问题吗?另外,不要使用'双'的价格。 – 2011-01-13 14:50:27

回答

8

这是integer division

100/(100 + 20) 

这将导致0

使之成为:

100.0/(100.0 + 20.0) 

,以确保所有参数都浮点类型。


顺便说一句 - 当我测试它时,函数返回“123.12”。


更新:

正如指出的几点意见 - 你应该使用decimal货币计算,尽管在这种情况下,它不可能是一个问题。

十进制值类型适用于需要大量重要整数和小数位且无舍入误差的财务计算。

1

您的一些文字是整数,使用(100.0/(100.0 + 20.0) + price)来获得双精度算术。

0
double preVatPrice = ((double)100/(100 + 20) + price);