vb.net和c++之间的文字精度为0.57

Literal 0.57 value less precision between vb.net and c++

本文关键字:精度 文字 net c++ 之间 vb      更新时间:2023-10-16

我有一个在c++中写入的dll,我有函数

int FiscalPrinter::Pay(const int iPayType,const int iPayForm,
                System::String ^sPayFormDescription, const double dAmount) {
...
}

现在在vb.net 中

dAmount = 0.57
If (FiscalPrinter.Pay(iPayType, iPayForm, sPayFormDescription, dAmount) = 
     FiscalPrinter.ansOK) Then

问题是在vb.net中发送0.57 c++的dll接收0.5699999999995,

读msdn它说

浮点值提供了它所代表的数字。例如,如果我们比较将.1乘以10,再将.1乘以.1九次,我们就知道了此外,由于它还涉及八项业务结果越不精确。

现在,如果我发送0.570000000000000006 c++,则接收一个更准确的值

那么,我应该如何发送0.57或任何合适的值??

使用整数,可以用美分表示货币:

iAmount = 57

你的功能应该是

int FiscalPrinter::Pay(const int iPayType,const int iPayForm,
                System::String ^sPayFormDescription, const int iAmount) {

整数没有浮点值那样的舍入问题。有关更多信息,请参阅Oracle的文章"每个计算机科学家都应该知道浮点运算"。